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);