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

Consulta con left join no me funciona

Estas en el tema de Consulta con left join no me funciona en el foro de Mysql en Foros del Web. Tengo una tabla para noticias , otra para los comentarios y otra para los votos . Quiero obtener un listado de las noticias, junto con ...
  #1 (permalink)  
Antiguo 08/10/2009, 18:00
 
Fecha de Ingreso: noviembre-2006
Mensajes: 166
Antigüedad: 17 años, 5 meses
Puntos: 4
Consulta con left join no me funciona

Tengo una tabla para noticias, otra para los comentarios y otra para los votos.
Quiero obtener un listado de las noticias, junto con la suma de votos y el total de comentarios. Lo he hecho de la siguiente forma:

Código PHP:
SELECT
    noticias
.id_noticia,
    
noticias.titulo,
    
SUM(votos_noticia.voto),
    
COUNT(comentarios_noticia.id_comentario)
FROM
    noticias
LEFT JOIN
    votos_noticia
    ON votos_noticia
.num_noticia noticias.id_noticia
LEFT JOIN
    comentarios_noticia
    ON comentarios_noticia
.num_noticia noticias.id_noticia
GROUP BY
    noticias
.id_noticia 
Pero no me da los resultados que debería. Por ejemplo, hay una noticia que tiene 8 comentarios y una puntuación de 2, y en los resultados de la consulta me dice que tiene 16 comentarios y una puntuación de 16. Lo que hace es multiplicar 2x8 no sé por qué.

¿Qué estoy haciendo mal en la consulta?
  #2 (permalink)  
Antiguo 09/10/2009, 07:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta con left join no me funciona

Código sql:
Ver original
  1. SELECT
  2.     noticias.id_noticia,
  3.     noticias.titulo,
  4.     vt.votos,
  5.     com.comentarios
  6. FROM
  7.     noticias
  8. LEFT JOIN
  9.     (SELECT votos_noticia.num_noticia,
  10.                   SUM(votos_noticia.voto) AS votos
  11.      FROM votos_noticia
  12.      GROUP BY votos_noticia.num_noticia) AS vt
  13.  ON vt.num_noticia = noticias.id_noticia
  14. LEFT JOIN
  15.     (SELECT comentarios_noticia.num_noticia,
  16.                   COUNT(*) AS comentarios
  17.       FROM comentarios_noticia  
  18.       GROUP BY votos_noticia.num_noticia) AS com
  19.  ON com.num_noticia = noticias.id_noticia;

Así mejor....

Tienes que pensar en la cardinalidad de los conjuntos cuando usas el join....

Busca una función para convertir los nulos a zero....



Quim
  #3 (permalink)  
Antiguo 09/10/2009, 11:01
 
Fecha de Ingreso: noviembre-2006
Mensajes: 166
Antigüedad: 17 años, 5 meses
Puntos: 4
Respuesta: Consulta con left join no me funciona

gracias quimfv. voy a probar

Última edición por DarkKing; 09/10/2009 a las 11:02 Razón: equivocacion
  #4 (permalink)  
Antiguo 09/10/2009, 11:20
 
Fecha de Ingreso: noviembre-2006
Mensajes: 166
Antigüedad: 17 años, 5 meses
Puntos: 4
Respuesta: Consulta con left join no me funciona

Pues sí, funciona.

¡Muchas gracias!
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 16:41.