2010-11-13 19 views
8

Tengo 3 tablas:MySQL - LEFT JOIN y COUNT()

  1. foros

identificación, nombre, descripción

  1. hilos

thread_id, forum_id, user_id, título, contenido, vistas

  1. mensajes

post_id, thread_id, autor_id, contenido, fecha

Lo que quiero hacer es obtener todos los hilos en un foro y obtener el recuento de publicaciones de cada hilo. Así que obtengo cada hilo (DONDE forum_id = lo que sea) y luego I LEFT JOIN con las publicaciones de la tabla para contar los resultados. Pero algo no está funcionando. Aquí está mi consulta:

SELECT t.*, u.nick, COUNT(p.post_id) AS postcount 
    FROM 
    threads t 
    LEFT JOIN 
    users u 
    ON 
     u.id = t.user_id 
    LEFT JOIN 
    posts p 
    ON 
     p.thread_id = t.thread_id 
    WHERE 
    t.forum_id = $this->forumID 

Esta consulta solo mostrará (creo) los hilos que tienen alguna publicación en ella. También intenté usar la instrucción GROUP BY, pero hace que el error de MySQL ...

¿Cómo puedo solucionar esto?

----------- EDIT: He intentado añadir GROUP BY t.thread_id, sin embargo, como he dicho antes, los errores de MySQL:

Usted tiene un error en su sintaxis SQL; compruebe el manual que corresponde a su versión del servidor MySQL para el sintaxis derecho al uso cerca de 'DONDE t.forum_id = 2' en la línea 15

consulta completa:

SELECT t.*, u.nick, COUNT(p.post_id) AS postcount 
    FROM 
    threads t 
    LEFT JOIN 
    users u 
    ON 
     u.id = t.user_id 
    LEFT JOIN 
    posts p 
    ON 
     p.thread_id = t.thread_id 
    GROUP BY 
    t.thread_id 
    WHERE 
    t.forum_id = $this->forumID 

EDIT 2:

Mi mal, puse la declaración GROUP BY en donde no estaba destinado. Ahora está resuelto.

Respuesta

10

GROUP BY era el camino correcto a seguir, por lo que sólo tiene que añadir: GROUP BY t.thread_id

0

se debe añadir GROUP BY t.thread_id, u.nick