Ver Mensaje Individual
  #10 (permalink)  
Antiguo 28/08/2006, 06:29
Avatar de Belero
Belero
 
Fecha de Ingreso: agosto-2006
Mensajes: 98
Antigüedad: 17 años, 7 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);