2010-11-13 12 views
8

J'ai 3 tables:MySQL - LEFT JOIN et COUNT()

  1. forums
id

, nom, description

  1. fils

ID_thread, forum_id, user_id, titre, contenu, vues

  1. messages

post_id, ID_thread, AUTHOR_ID, contenu, la date

Ce que je veux faire est d'obtenir tous les threads dans un forum, et obtenir le compte de chaque thread. Donc, je reçois chaque thread (WHERE forum_id = quel que soit) et puis je LEFT JOIN avec les messages de la table afin de compter les résultats. Mais quelque chose ne fonctionne pas. Voici ma requête:

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 

Cette requête affichera seulement (je pense) les threads qui ont un post dessus. J'ai également essayé d'utiliser l'instruction GROUP BY mais cela fait une erreur MySQL ...

Comment puis-je résoudre ce problème?

----------- EDIT: J'ai essayé d'ajouter GROUP BY t.thread_id, cependant, comme je l'ai dit, les erreurs MySQL:

Vous avez une erreur votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser à proximité 'WHERE t.forum_id = 2' à la ligne 15

requête complète:

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:

Mon mauvais, j'ai mis la déclaration GROUP BY où il n'était pas destiné à être. C'est maintenant résolu.

Répondre

10

GROUP BY était la bonne façon d'aller, alors il suffit d'ajouter: GROUP BY t.thread_id

0

Vous devriez ajouter GROUP BY t.thread_id, u.nick