Ver Mensaje Individual
  #10 (permalink)  
Antiguo 28/08/2006, 06:29
Avatar de Belero
Belero
 
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 20 años, 2 meses
Puntos: 0
Lo que se ganan son recursos del servidor, hay que hacer muchas menos consultas, te pongo los ejemplos que conozco donde la finalidad es conseguir en un array los datos de unos clientes y su población estando esta relacoinada en otra tabla, que es más o menos lo que creo que quieres

Mega consultas
En este ejemplo se consultan los clientes, luego se recorren los resultados de los clientes, y cada vez que se recorre un resultado se consulta la población del cliente y se guarda todo en el array.
La principal desventaja son las consultas que se hacen a la BD, y la posibilida de repetir alguna de ellas si varios clientes tienen la misma población (esto se podría mejorar guardándolo en un array y tal, pero bueno)
1 cliente -> 2 consultas
5 clientes -> 6 consultas
100 clientes -> 101 consultas
Código PHP:
$consulta_cliente = mysql_query("
  SELECT idcliente,
         nombrecliente,
         idpoblacion
  FROM cliente
"
);

$clientes = array();

while(
$cliente = mysql_fetch_array($consulta_cliente))
{
  
$consulta_poblacion = mysql_query("
    SELECT nombrepoblacion
    FROM poblacion
    WHERE idpoblacion = " 
. $cliente['idpoblacion'] . "
    LIMIT 1
  "
);
  
  
$poblacion = mysql_fetch_array($consulta_poblacion);

  
$clientes[$cliente['idcliente']] = array(
    
'idcliente' => $cliente['idcliente'],
    
'nombrecliente' => $cliente['nombrecliente'],
    
'idpoblacion' => $cliente['idpoblacion'],
    
'nombrepoblacion' => $poblacion['nombrepoblacion']
  );
}

print_r($cliente); 

IN
En este otro se utiliza otra opción de mysql con la cual en el where le puedes decir los valores que quieres consultar de forma simple.
Consultamos los clientes igual, luego recorremos los resultados y vamos almacenando los datos que tenemos del cliente en el array, y guardando la idpoblacion.
Luego consultamos todas las poblaciones de los clientes seleccionados, las recorremos también y se la asignamos a cada cliente en el array.
1 cliente -> 2 consultas
5 clientes -> 2 consultas
100 clientes -> 2 consultas

Código PHP:
$consulta_cliente = mysql_query("
  SELECT idcliente,
         nombrecliente,
         idpoblacion
  FROM cliente
"
);

$clientes = array();
$poblaciones = array();
$poblacioncliente = array();

while(
$cliente = mysql_fetch_array($consulta_cliente))
{
  
$poblaciones[] = $cliente['idpoblacion'];
  
$poblacioncliente[$cliente['idpoblacion']][] = $cliente['idcliente'];

  
$clientes[$cliente['idcliente']] = array(
    
'idcliente' => $cliente['idcliente'],
    
'nombrecliente' => $cliente['nombrecliente'],
    
'idpoblacion' => $cliente['idpoblacion']
  );
}

$poblaciones = implode(',', $poblaciones);
$consulta_poblacion = mysql_query("
  SELECT idpoblacion,
         nombrepoblacion
  FROM poblacion
  WHERE idpoblacion IN(" 
. $poblaciones . ")
"
);

while(
$poblacion = mysql_fetch_array($consulta_poblacion))
{
  foreach(
$poblacioncliente[$poblacion['idpoblacion']] AS $idcliente)
  {
    
$cliente[$idcliente]['nombrepoblacion'] = $poblacion['nombrepoblacion']
  }
}

print_r($cliente); 

JOIN
En esta se utiliza lo que te comenté antes, el join
Simplemente se consultan todos los datos en una consulta, se recorren los resultados y se guardan en el array, la más simple, fácil y rápida de todas.
1 cliente -> 1 consulta,
5 clientes -> 1 consulta,
100 clientes -> 1 consulta

Código PHP:
$consulta_cliente = mysql_query("
  SELECT cliente.idcliente,
         cliente.nombrecliente,
         poblacion.idpoblacion,
         poblacion.nombrepoblacion
  FROM cliente
  LEFT JOIN poblacion ON(cliente.idpoblacoin = poblacion.idpoblacion)
"
);

$clientes = array();

while(
$cliente = mysql_fetch_array($consulta_cliente))
{
  
$clientes[$cliente['idcliente']] = array(
    
'idcliente' => $cliente['idcliente'],
    
'nombrecliente' => $cliente['nombrecliente'],
    
'idpoblacion' => $cliente['idpoblacion'],
    
'nombrepoblacion' => $cliente['nombrepoblacion']
  );
}

print_r($clientes);