Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Seleccionar comentarios de una publicación

Estas en el tema de Seleccionar comentarios de una publicación en el foro de Bases de Datos General en Foros del Web. Hola todos, tengo una duda que espero que me podais ayudar a resolverla, ya que no muevo mucho de PHP... Tengo una base de datos ...
  #1 (permalink)  
Antiguo 18/02/2013, 10:56
Avatar de Adbane  
Fecha de Ingreso: junio-2011
Mensajes: 86
Antigüedad: 12 años, 10 meses
Puntos: 6
Pregunta Seleccionar comentarios de una publicación

Hola todos, tengo una duda que espero que me podais ayudar a resolverla, ya que no muevo mucho de PHP...

Tengo una base de datos dónde hay dos tablas, una es "publicaciones" y la otra "comentarios". La idea es mediante PHP seleccionar todas las publicaciones junto a sus respectivos comentarios, para ello en la tabla comentarios tengo un campo que se llama "id_publi". Con una sentencia SQL llamo al contenido que necesito, el siguiente código:

Código SQL:
Ver original
  1. SELECT publicacion.id, publicacion.nombre, publicacion.comentario, comentarios.nombre, comentarios.comentario
  2. FROM publicacion,comentarios
  3. WHERE publicacion.id = comentarios.id_publi
  4. ORDER BY publicacion.id;

Al principio todo bien, me selecciona los comentarios respectivos a cada publicación, pero claro, al poner "WHERE" estoy especificando unicamente las entradas que tienen el ID en común, es decir, si en la tabla "publicaciones" tengo entradas que aún no tienen un comentario, estas no me las selecciona.

Mi idea es muy sencilla, quiero seleccionar un máximo de 10 publicaciones, y junto a cada publicación que se vean sus 3 últimos comentarios. Para no complicar la cosa, me gustaría unicamente saber como seleccionar todas las publicaciones y sus comentarios, independientemente de si tienen o no, del resto ya me encargaré yo.

Espero que alguien tenga idea de como hacerlo, le estaré muy agradecido.

¡Gracias de antemano!
__________________
Diseñador web por amor al arte, o al HTML mejor dicho

Última edición por gnzsoloyo; 18/02/2013 a las 18:49 Razón: Mal etiquetado y con codigo de programacion no permitido en foros de BBDD.
  #2 (permalink)  
Antiguo 18/02/2013, 11:23
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Seleccionar comentarios de una publicación

Esto se consigue uniendo las tablas con
FROM publicacion LEFT JOIN comentarios ON publicacion.id=comentarios.id_publi
y retirando la comparación del WHERE.

Saldrán tanto las que sí como las que no. Lo que no tengo tan claro es si es LEFT JOIN o RIGHT JOIN. Prueba con ambos.
  #3 (permalink)  
Antiguo 18/02/2013, 11:32
Avatar de Adbane  
Fecha de Ingreso: junio-2011
Mensajes: 86
Antigüedad: 12 años, 10 meses
Puntos: 6
Respuesta: Seleccionar comentarios de una publicación

Cita:
Iniciado por alyciashape Ver Mensaje
Esto se consigue uniendo las tablas con
FROM publicacion LEFT JOIN comentarios ON publicacion.id=comentarios.id_publi
y retirando la comparación del WHERE.

Saldrán tanto las que sí como las que no. Lo que no tengo tan claro es si es LEFT JOIN o RIGHT JOIN. Prueba con ambos.
Con RIGHT JOIN el efecto es el mismo, con LEFT JOIN parece si funcionar... a medias. Cuando tengo más de 1 comentario que comparte el mismo "id_publi", lo que hace me repite la publicación ese número de veces, mostrando en cada una cada comentario, es decir, si una publicación tiene 2 comentarios, me repite la publicación 2 veces, mostrando en cada una cada comentario.

Seguiré trasteando un poco el código, a ver que consigo.
__________________
Diseñador web por amor al arte, o al HTML mejor dicho
  #4 (permalink)  
Antiguo 18/02/2013, 11:35
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Seleccionar comentarios de una publicación

Algunas notas..
-Dices que vas a tomar 10 publicaciones, pero en la query no hay ningún LIMIT..Supongo que se lo añadirás en algún momento del script.
-Supón que de esas 10 publicaciones, la media de comentarios por publicación, es 100.Lo hagas por un INNER JOIN (que es lo que estás haciendo), lo hagas por un LEFT JOIN, como te proponen, la query va a retornar 10*100 = 1000 filas.
Los datos de la publicación va a estar repetido 100 veces cada uno.
De esas 1000 filas, tú sólo estarías interesado en 30...Las otras 970 son tiempo y memoria de mysql y de php que no vas a usar..
  #5 (permalink)  
Antiguo 18/02/2013, 11:36
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
Respuesta: Seleccionar comentarios de una publicación

Claro, pero eso es normal.

Mira, lo más fácil es lo siguiente.
Haces un SELECT de las publicaciones, haces un bucle para recorrerlas y dentro de este bucle haces un SELECT de los comentarios para la publicación del bucle. No se si me expliqué.
  #6 (permalink)  
Antiguo 18/02/2013, 11:47
Avatar de Adbane  
Fecha de Ingreso: junio-2011
Mensajes: 86
Antigüedad: 12 años, 10 meses
Puntos: 6
Respuesta: Seleccionar comentarios de una publicación

Cita:
Iniciado por dashtrash Ver Mensaje
Algunas notas..
-Dices que vas a tomar 10 publicaciones, pero en la query no hay ningún LIMIT..Supongo que se lo añadirás en algún momento del script.
-Supón que de esas 10 publicaciones, la media de comentarios por publicación, es 100.Lo hagas por un INNER JOIN (que es lo que estás haciendo), lo hagas por un LEFT JOIN, como te proponen, la query va a retornar 10*100 = 1000 filas.
Los datos de la publicación va a estar repetido 100 veces cada uno.
De esas 1000 filas, tú sólo estarías interesado en 30...Las otras 970 son tiempo y memoria de mysql y de php que no vas a usar..
En realidad tengo un "LIMIT 0, 10" al final de la sentencia, pero para no liar mucho el tema, he puesto un código mucho más liviano aqui, mi sentencia es mucho más larga, hay muchos elementos de cada tabla a los que llamo, de ejemplo he puesto solo lo básico.

Sobre lo que me comentas, también pensé en la posibilidad de que en vez de mostrar los 3 ultimos comentarios, me mostrase el número de comentarios que tiene dicha publicación, y ya una vez dentro de ella me muestra una porción exacta de comentarios por página. Aunque esto es como opción B, por ahora es prioridad que se muestren los 3 ultimos comentarios de cada publicación en la página de inicio. Algo al estilo Facebook, que te muestra 2 o 3 comentarios, y puedes darle a "Ver más".

Cita:
Iniciado por alyciashape Ver Mensaje
Claro, pero eso es normal.

Mira, lo más fácil es lo siguiente.
Haces un SELECT de las publicaciones, haces un bucle para recorrerlas y dentro de este bucle haces un SELECT de los comentarios para la publicación del bucle. No se si me expliqué.
Si si, entiendo exactamente a que te refieres, probé algo parecido. Yo ya tengo un bucle para recorrer las publicaciones, empecé trabajando en ello, y ahora es cuando tocan los comentarios. Yo probé haciendo otro bucle para recorrer los comentarios, pero lo hice fuera del bucle de las publicaciones. Si, lo hice pensando sin lógica xD Ahora probaré lo que me comentas.
__________________
Diseñador web por amor al arte, o al HTML mejor dicho
  #7 (permalink)  
Antiguo 18/02/2013, 11:51
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Seleccionar comentarios de una publicación

Cita:
Iniciado por Adbane Ver Mensaje
Sobre lo que me comentas, también pensé en la posibilidad de que en vez de mostrar los 3 ultimos comentarios, me mostrase el número de comentarios que tiene dicha publicación, y ya una vez dentro de ella me muestra una porción exacta de comentarios por página. Aunque esto es como opción B, por ahora es prioridad que se muestren los 3 ultimos comentarios de cada publicación en la página de inicio. Algo al estilo Facebook, que te muestra 2 o 3 comentarios, y puedes darle a "Ver más".
Eso no tiene nada que ver con lo que te comento..Te digo que resolverlo con 1 query, haciendo un left o inner, o cualquier otro join, te lleva a resultados repetidos y/o innecesarios.
Luego, y por hacerlo sencillo, NO hagas un bucle que haga 10 selects.
Haz un bucle que crea 1 sola query, con los 10 selects unidos por "UNION ALL".Reindexa los resultados en php, según el id de publicación.
  #8 (permalink)  
Antiguo 18/02/2013, 12:13
Avatar de Adbane  
Fecha de Ingreso: junio-2011
Mensajes: 86
Antigüedad: 12 años, 10 meses
Puntos: 6
Respuesta: Seleccionar comentarios de una publicación

Cita:
Iniciado por dashtrash Ver Mensaje
Eso no tiene nada que ver con lo que te comento..Te digo que resolverlo con 1 query, haciendo un left o inner, o cualquier otro join, te lleva a resultados repetidos y/o innecesarios.
Luego, y por hacerlo sencillo, NO hagas un bucle que haga 10 selects.
Haz un bucle que crea 1 sola query, con los 10 selects unidos por "UNION ALL".Reindexa los resultados en php, según el id de publicación.
He estado mirando como se haría, pero la verdad, no tengo ni idea de como emplear un UNION ALL de tal modo que me seleccione los comentarios de cada publicación. Tanto de SQL como de PHP mis conocimientos son básicos.
__________________
Diseñador web por amor al arte, o al HTML mejor dicho
  #9 (permalink)  
Antiguo 18/02/2013, 12:52
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Seleccionar comentarios de una publicación

si tienes dos queries, A y B , que retornan , por resumir, los mismos campos, podrias hacer primero la query A , y luego la B.

o hacer A UNION ALL B UNION ALL C .... etc
  #10 (permalink)  
Antiguo 18/02/2013, 13:59
Avatar de Adbane  
Fecha de Ingreso: junio-2011
Mensajes: 86
Antigüedad: 12 años, 10 meses
Puntos: 6
Respuesta: Seleccionar comentarios de una publicación

Lo probaré más tarde, o mañana, que estoy muy muy liado...

De todas formas creo que me va a costar un poco conseguirlo, o al menos me dará muchos dolores de cabeza xD Veré en que queda la cosa.
__________________
Diseñador web por amor al arte, o al HTML mejor dicho

Etiquetas: comentarios, php, select, sql, tabla
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 01:07.