Foros del Web » Programando para Internet » PHP »

Consulta a BD

Estas en el tema de Consulta a BD en el foro de PHP en Foros del Web. La siguiente consulta recoge los valores de un campo 'idp' <?php $ssql1=("SELECT * FROM tabla"); $result1=mysql_query($ssql1,$conn); while ($row1=mysql_fetch_array($result1)) { $idp=$row1["idp"]; } ?> Luego tomo los ...
  #1 (permalink)  
Antiguo 14/12/2003, 14:54
 
Fecha de Ingreso: octubre-2003
Mensajes: 46
Antigüedad: 14 años, 1 mes
Puntos: 0
Consulta a BD

La siguiente consulta recoge los valores de un campo 'idp'

<?php
$ssql1=("SELECT * FROM tabla");
$result1=mysql_query($ssql1,$conn);
while ($row1=mysql_fetch_array($result1))
{
$idp=$row1["idp"];
}
?>

Luego tomo los resultados de idp (o sea n idp) y los uso para consultar a otra tabla otros datos, en la cual este idp puede estar en tres campos (idp1, idp2, idp3) :

<?php
$ssql=("SELECT * FROM tabla2 WHERE idp1='$idp' or idp2='$idp' or idp3='$idp'");
$result=mysql_query($ssql,$conn);
while ($row=mysql_fetch_array($result))
{
echo "idrs':".$row['idr']."<br>";
}

?>

El problema que creo que se produce es que toma como $idp solo al último registro encontrado en la primera consulta.

¿Como hago que busque a cada uno de los registros encontrados en la primera consulta (o sea para cada $idp) y repita busqueda en la segunda consulta tantas veces como idp se encuentren y muestre los otros datos correspondientes a cada idp para cada repetición?

Espero se entienda, saludos y gracias...
  #2 (permalink)  
Antiguo 14/12/2003, 15:09
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Tines razon, el primer while solo hace que se almacene el ultimo $row1["idp"] en la variable $idp. De hecho eso es lo que le mandas con ese codigo. Si quieres almacenar mas de un valor en una variable, esa variable debe ser un array. Y para crear ese array con esos valores puedes usar este codigo:
Código PHP:
<?php
$ssql1
=("SELECT * FROM tabla");
$result1=mysql_query($ssql1,$conn);
while (
$row1=mysql_fetch_array($result1))
{
$idp[]=$row1["idp"];
}
?>
Asi $idp es un array con todos los idp de la consulta.

Ahora la segunda consulta. Como $idp ya no es un valor sino un array, mas que mirar si un campo es igual a un valor, lo que necesitas saber es si ese campo esta en una lista de valores. Para eso esta el operador IN de SQL. Pero primero debemos convertir el array en una cadena para que sea el segundo operando del IN:
Código PHP:
$idp_cadena=implode("','",$idp);
$idp_cadena="('$idp_cadena'); 
Puedes hacer un echo de cada paso, pero lo unico que hago es crear una lista de valores entrcomillados separados por comas y puestos entre parentesis.

Y la consulta quedaria como:
Código PHP:
<?php
$ssql
=("SELECT * FROM tabla2 WHERE idp1 IN $idp_cadena or idp2 IN $idp_cadena or idp3 IN $idp_cadena");
$result=mysql_query($ssql,$conn);
while (
$row=mysql_fetch_array($result))
{
echo 
"idrs':".$row['idr']."<br>";
}
?>
Haz un echo $ssql para ver como queda la consulta.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:46.