Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema al unir consultas

Estas en el tema de Problema al unir consultas en el foro de PHP en Foros del Web. Bueno me a surgido un problema agradeceria de antemano si me pudieran ayudar tratare de ser lo mas explicativo posible resulta que tengo una 2 ...
  #1 (permalink)  
Antiguo 10/07/2013, 14:09
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 10 años, 9 meses
Puntos: 6
Pregunta Problema al unir consultas

Bueno me a surgido un problema agradeceria de antemano si me pudieran ayudar tratare de ser lo mas explicativo posible resulta que tengo una 2 consultas unidas por LEFT OUTER JOIN en la que planeo hacer un sistema de noticias con comentarios una tabla la llame publications y la otra la llame comments en la tabla comments tengo un campo el cual almacena el id de la noticia que es lo que relaciona ambas tablas esta es mi consulta:

Código PHP:
mysql_select_db($database_Coxionyoguel$Coxionyoguel);
$query_ConPublications "SELECT publications.idPublications, publications.idUser, publications.G_Publications, publications.G_Photo, publications.G_Time, comments.idComments, comments.idPublication, comments.idUser, comments.G_Comment, comments.G_Photo, comments.G_Time FROM publications LEFT OUTER JOIN comments ON publications.idPublications = comments.idPublication ORDER BY publications.G_Time DESC";
$ConPublications mysql_query($query_ConPublications$Coxionyoguel) or die(mysql_error());
$row_ConPublications mysql_fetch_assoc($ConPublications);
$totalRows_ConPublications mysql_num_rows($ConPublications); 
bueno mi problema surge ya que cada noticia puede tener varios comentarios la union me separa perfectamente los resultados es decir me separa cada comentario con su repectiva noticia el problema biene cuando hay mas de dos comentarios esta me repite la noticia y me agrega el comentario siendo que el objetivo que busco esque se agreguen los comentarios en orden de acuerdo a la noticia.

Otro problema que tengo esque uso do while para repetir la region y dentro estan los comentarios no tengo idea de como anidar los registros es decir que pueda hacer otro do while para comentarios dentro del do while de noticias.

me e planteado otra opcion la cual era traer los comentarios pasando el valor de la variable en este caso la id por metodo GET de la noticia por metodo ajax pero no me sirve ya que lo que plateo es mostrar cada noticia con sus comentario sin necesidad de dar click a comentar mas explicable planeo hacer un sistema de noticias tipo facebook que muestra 4 comentarios y un enlace que despliega los demas. Agradeceria si alguien me pudiera ayudar!

Código PHP:
<?php do { ?>
//Contenido de la noticia

//Comentarios
<?php } while ($row_ConPublications mysql_fetch_assoc($ConPublications)); ?>
  #2 (permalink)  
Antiguo 10/07/2013, 14:34
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Problema al unir consultas

Holas, cesa_r, y bienvenid@.

Podrías de un principio haber consultado sólo las noticias, recorrerlas con tu ciclo, y por cada noticia, hacer una nueva consulta para obtener sus respectivos comentarios. Sin embargo, la forma en que lo haces es buena también, en el sentido que haces una sola vez la consulta, aunque el resultado es más grande, ya que te trae las noticias duplicadas por N comentarios.

Para continuar con la forma que ya trabajas, debes establecer un control dentro del ciclo, que permita imprimir la noticia la primera vez que la encuentra, pero de ahí en más, sólo sus comentarios, hasta que llegue la siguiente noticia. Esto lo puedes hacer basándote en el ID de la noticia.

Si durante el ciclo el ID cambia, imprimes la noticia. Si el ID se mantiene, no imprimes la noticia, pues ya lo hiciste antes. En el caso de los comentarios, debieras imprimirlos todos (ya que a fin de cuenta, tu consulta sql obtiene los comentarios, no las noticias). Cuando imprimas la noticia, debes agregar todas las etiquetas de apertura y cierre de HTML, de modo que los comentarios queden visualmente dentro de la noticia correspondiente.

Suerte y saludos!
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #3 (permalink)  
Antiguo 10/07/2013, 14:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema al unir consultas

Lo que tienes que hacer es dos consultas, o más bien 1:n consultas, primero seleccionas todas las noticias, luego por cada noticia en tu ciclo, haces otra consulta para traer los comentarios de esa noticia, y así imprimirlas nuevamente.

Saludos.

PD Evita usar Dreamweaver, tiene muchas, muchas malas prácticas.
  #4 (permalink)  
Antiguo 10/07/2013, 15:11
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 10 años, 9 meses
Puntos: 6
Respuesta: Problema al unir consultas

Bueno les dire primero de antemano muchas gracias! por tomarse el tiempo y la molestia de ayudarme. Disculpen mi ignorancia pero no tengo mucho timpo aprendiendo php y la verdad esque diria que solo se lo basico a que se refieren al correrlas en su ciclo y como podria traer la consulta que dicen? se refieren a que debo separar las consultas? y si es asi como podria hacerlo! Gracias!
  #5 (permalink)  
Antiguo 10/07/2013, 15:26
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 10 años, 9 meses
Puntos: 6
Respuesta: Problema al unir consultas

Aqui el codigo y esque a lo mucho tengo 3 meses aprendiendo todo esto de la programacion!
Código PHP:
Ver original
  1. <?php if ($totalRows_ConPublications > 0) { // Show if recordset not empty ?>
  2.   <?php do { ?>
  3.     <!----------- Publications ----------->
  4.     <div class="sections-publications">
  5.       <div class="publications-img-profile"> <img src="Topics/images/G_Profile.png" width="192" height="192" /> </div>
  6.       <div class="publications-content">
  7.         <div class="publications-profile-title"> Nombre del usuario <a class="publications-time">Publicado hace 7 min</a> </div>
  8.         <div class="publications"> <?php echo $row_ConPublications['G_Publications']; ?>
  9.           <div class="publications-actions">
  10.             <div class="publications-mark-content"> Me gusta </div>
  11.             <div class="publications-mark-content"> No me gusta </div>
  12.             <div class="publications-mark-content"> <a href="Topics/modules/includes/comments.php?Publication=<?php echo $row_ConPublications['idPublications']; ?>">Comentar</a> </div>
  13.             <div class="publications-mark-content-share"> <img src="Topics/Images/G_Share.png" width="16" height="16" />Compartir </div>
  14.           </div>
  15.         </div>
  16.       </div>
  17.       <!----------- end Publications ----------->
  18.       <div class="publications-commentbox">
  19.         <div class="publications-comment-result"> Ati te <a class="publication-comment-result-select">gusta</a> esto </div>
  20.         <!----------- body comment ----------->
  21.         <?php if ($row_ConPublications['idPublication'] > 0) { // Show if recordset not empty ?>
  22.         <div class="publications-comment-content">
  23.           <div class="publications-comment-profile"> <img src="Topics/images/G_Profile.png" width="192" height="192" /> </div>
  24.           <div class="publications-comment-body"> <a class="publications-comment-title"> Nombre del que comenta </a> <?php echo $row_ConPublications['G_Comment']; ?>
  25.             <div class="publications-comment-statistical"> <a class="publication-comment-result-select"> Me gusta No me Gusta </a> <a class="publications-comment-time">Hace 7 min</a> </div>
  26.           </div>
  27.         </div>
  28.         <?php } ?>
  29.         <div class="publications-addcomment">
  30.           <div class="publications-comment-profile"> <img src="Topics/images/G_Profile.png" /> </div>
  31.           <div class="publications-comment-upload"> <img src="Topics/images/G_Photo.png" width="18" height="18" /> </div>
  32.           <form action="<?php echo $editFormAction; ?>" method="post" name="addComment" id="addComment">
  33.             <textarea class="publications-comment-textarea"  placeholder="Escribe un comentario..." name="G_Comment" cols="" rows=""></textarea>
  34.             <input name="idUser" type="hidden" value="<?php echo $_SESSION['MM_User']; ?>" />
  35.             <input name="idPublication" type="hidden" value="<?php echo $row_ConPublications['idPublications']; ?>" />
  36.             <input name="G_Photo" type="hidden" value="" />
  37.             <input name="G_Time" type="hidden" value="" />
  38.             <input type="hidden" name="MM_insert" value="addComment" />
  39.           </form>
  40.         </div>
  41.         <!----------- end body Commment ----------->
  42.       </div>
  43.       <!----------- end Commment ----------->
  44.     </div>
  45.  
  46.     <?php } while ($row_ConPublications = mysql_fetch_assoc($ConPublications)); ?>
  47.   <?php } // Show if recordset not empty ?>
  48. <?php
  49. mysql_free_result($ConPublications);
  50. ?>
  #6 (permalink)  
Antiguo 10/07/2013, 15:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problema al unir consultas

Ese código que expones esta muy enredado, básicamente es algo así (pseudocódigo no hagas copy/paste):
Código PHP:
Ver original
  1. $sql = "consulta para traer todas las noticias";
  2. $result = ejecutar_consulta($sql);
  3. while($row = trae_row($result)) {
  4.         // Imprimes noticia
  5.  
  6.        $sql2 = "consulta que trae los comentarios por ID de la noticia";
  7.        $result2 = ejecutar_consulta($sql2);
  8.        while ($row2 = trae_row($result2)) {
  9.              // Imprimes los comentarios
  10.        }
  11. }

Si te fijas es básicamente ejecutar dos ciclos anidados, uno para las noticias principales y el otro para los comentarios de esas noticias.

Saludos.
  #7 (permalink)  
Antiguo 10/07/2013, 16:05
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 10 años, 9 meses
Puntos: 6
Respuesta: Problema al unir consultas

Aver si entendi un poco


Código PHP:
Ver original
  1. $sql = "consulta para traer todas las noticias"; //Aqui iria la consulta que trae las consultas algo como esto ( $sql = "SELECT * FROM publications ORDER BY publications.G_Time DESC";)
  2.     $result = ejecutar_consulta($sql);
  3.     while($row = trae_row($result)) {
  4.             // Aqui iria lo que biene siendo el html de la noticia?
  5.            // por ejemplo: echo "<div></div>"
  6.      
  7.            $sql2 = "consulta que trae los comentarios por ID de la noticia"; // aqui iria algo como esto ( $sql = "SELECT * FROM comments WHERE comments.idPublication = '".row[publications.idPublications]."' ORDER BY comments.G_Time DESC";)
  8.            $result2 = ejecutar_consulta($sql2);
  9.            while ($row2 = trae_row($result2)) {
  10.                  // Aqui iria lo que biene siendo el html del comentario?
  11.                 // por ejemplo: echo "<div></div>"
  12.            }
  13.     }

Aora en caso de que fuera haci que pasa si un <div> contine a la noticia y al comentario como haria para repetir este <div> que los alberga a los dos.
  #8 (permalink)  
Antiguo 10/07/2013, 16:48
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Respuesta: Problema al unir consultas

Siguiendo la propuesta que te dio GatorV, y tus propias dudas:

Código PHP:
$sql "consulta para traer todas las noticias"//Aqui iria la consulta que trae las consultas algo como esto ( $sql = "SELECT * FROM publications ORDER BY publications.G_Time DESC";)
    
$result ejecutar_consulta($sql);
    while(
$row trae_row($result)) {
            
// Aqui iria lo que biene siendo el html de la noticia? 
           // SIP. Aca abres la noticia e imprimes su contenido
           
echo "<div>";
     
           
$sql2 "consulta que trae los comentarios por ID de la noticia"// aqui iria algo como esto ( $sql = "SELECT * FROM comments WHERE comments.idPublication = '".row[publications.idPublications]."' ORDER BY comments.G_Time DESC";) 
           
$result2 ejecutar_consulta($sql2);
           while (
$row2 trae_row($result2)) {
                 
// Aqui iria lo que biene siendo el html del comentario?
                // EXACTO. 
                
echo "<div></div>"
           
}
           
// Aca cierras la noticia
           
echo "</div>";
    } 
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #9 (permalink)  
Antiguo 10/07/2013, 20:46
 
Fecha de Ingreso: julio-2013
Mensajes: 158
Antigüedad: 10 años, 9 meses
Puntos: 6
Respuesta: Problema al unir consultas

Buenisimo me a funcionado como esperaba agradesco a todos los que se tomoran la molestia de ayudarme!

Etiquetas: Ninguno
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 13:00.