2010-11-13 20 views
8

Ich habe 3 Tabellen:MySQL - LEFT JOIN und COUNT()

  1. Foren

id, Name, Beschreibung

  1. Gewinde

thread_id, forum_id, user_id, Titel, Inhalt, Ansichten

  1. Beiträge

post_id, thread_id, author_id, Inhalt, Datum

Was ich tun möchte, ist, alle Threads in einem Forum zu bekommen, und die Post-Anzahl von jedem Thread zu bekommen. Also bekomme ich jeden Thread (WHERE forum_id = was auch immer) und dann LINKE ich JOIN mit den Tabellen-Posts also um die Ergebnisse zu zählen. Aber etwas funktioniert nicht. Hier ist meine Abfrage:

Diese Abfrage wird nur zeigen (denke ich) die Threads, die Post auf sie haben. Ich habe auch versucht, die GROUP BY-Anweisung, aber es macht MySQL Fehler ...

Wie kann ich das lösen?

----------- EDIT: Ich habe versucht GROUP BY t.thread_id fügte aber hinzu, wie ich schon sagte, MySQL Fehler:

Sie haben einen Fehler in Ihre SQL-Syntax; Sie in die Bedienungsanleitung zu Ihrer MySQL-Server-Version für die richtige Syntax entspricht in der Nähe zu verwenden 'WHERE t.forum_id = 2' in Zeile 15

Voll query:

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:

Meine schlechte, ich habe die GROUP BY-Anweisung, wo es nicht sein sollte. Es ist jetzt gelöst.

Antwort

10

Gruppe wurde durch den richtigen Weg zu gehen, so fügen Sie einfach: GROUP BY t.thread_id

0

Sie hinzufügen sollten GROUP BY t.thread_id, u.nick