Foros del Web » Programando para Internet » PHP »

Anidar dos consultas Mysql

Estas en el tema de Anidar dos consultas Mysql en el foro de PHP en Foros del Web. Hola amigos, les comento mi nuevo problema: Lo que quiero conseguir es bastante simple, ahora tengo una lista de comentarios a un post que los ...
  #1 (permalink)  
Antiguo 19/10/2011, 04:15
 
Fecha de Ingreso: abril-2010
Mensajes: 86
Antigüedad: 14 años, 6 meses
Puntos: 0
Anidar dos consultas Mysql

Hola amigos, les comento mi nuevo problema:

Lo que quiero conseguir es bastante simple, ahora tengo una lista de comentarios a un post que los saco con una consulta a la base de datos, algo asi:

Código PHP:
        $sql mysql_query("SELECT * FROM comentarios WHERE id=$id ORDER BY votospositivos-votosnegativos DESC LIMIT 0,25");
        while(
$row mysql_fetch_array($sql))
        {
        
$fecha=$row["fecha"];
        
$hora=$row["hora"];
        
$mensaje=$row["mensaje"];
// y asi mas datos....
//y ahora voy arrojando el html correspondiente a cada comentario y tal...
echo $mensaje;

De este modo, dentro del propio while {} voy sacando los datos de la base de datos y arrojando su correspondiente html, hasta este punto todo funciona perfecto.
El problema viene ahora, existen respuestas a las comentarios, imaginad que al primer comentario le han contestado otros dos comentarios (respuestas) entonces lo que me gustaria hacer, seria que apareciera algo asi:

Comentario 1
Respuesta1 al comentario 1
Respuesta2 al comentario 1
Comentario 2
Respuesta1 al comentario 1
Comentario 3 ..... etc

Ahora para implementarlo, cada respuesta tiene un campo que contiene la id del comentario al que esta respondiendo dicha respuesta, entonces pensé... facil anido dos while {} y hecho, entonces quedaria algo como :

Código PHP:
        $sql mysql_query("SELECT * FROM comentarios WHERE id=$id ORDER BY votospositivos-votosnegativos DESC LIMIT 0,25");
        while(
$row mysql_fetch_array($sql))
        {
        
$fecha=$row["fecha"];
        
$hora=$row["hora"];
        
$mensaje=$row["mensaje"];
        
$idrespuesta=$row["idrespuesta"]; //este es el campo que contiene la //id de las respuestas a este comentario (las respuestas tambien son //comentarios)
// y asi mas datos....
//y ahora voy arrojando el html correspondiente a cada comentario y tal...
echo $mensaje;
//sin cerrar el { del 1er while, abro otra consulta ( la de las respuestas)

    
$sql mysql_query("SELECT * FROM comentarios WHERE idrespuesta=$idrespuesta ORDER BY votospositivos-votosnegativos DESC LIMIT 0,25");
        while(
$row mysql_fetch_array($sql))
        {
        
$fecha=$row["fecha"];
        
$hora=$row["hora"];
        
$mensaje=$row["mensaje"];
// y asi mas datos....
//y ahora voy arrojando el html correspondiente a cada comentario y tal...(en //este caso es una respuesta a un comentario)
echo $mensaje;
}
//cierro el while de las respuestas 


}//cierro el while de los comentarios 
Bueno pues no me funciona, no se si es simplemente algun fallo logico o que no esta permitido anidar dos consultas mysql while($row = mysql_fetch_array($sql))

Alguna idea de lo que me pasa o otra forma de implementarlo???

Un saludo y gracias a todos !!
  #2 (permalink)  
Antiguo 19/10/2011, 04:20
 
Fecha de Ingreso: abril-2010
Mensajes: 86
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Anidar dos consultas Mysql

Buff vale, segun he puesto el comentario me he dado cuenta de un posible fallo y ya lo tengo... era una chorrada
La segunda consulta la asociaba a la misma variable $sql, he probado con otra distinta $sqll y funciona como deberia funcionar... es decir si que se pueden anidar consultas de este tipo

Si es que no hay nada mejor que explicar lo que quieres hacer para darte cuenta de los fallos jejej.


Bueno gracias a todos, espero que al menos el codigo le sirva a alguien jeje..

Un saludo !!

Etiquetas: anidar, mysql
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 11:29.