Sie müssen alle Spalten, die Sie auswählen, in SELECT
hinzufügen -Klausel mit Ausnahme von c.USER_ID
zu GROUP BY
Klausel, etwa so:
group by c.ID, c.otherfields, l.title,..
BEARBEITEN: Ich denke, das Folgende wird richtig funktionieren:
SELECT count(c.USER_ID) as total_commments_user ,
c.*, u.NAME, l.TITLE as LINK_TITLE, u.AUTH_IMG
FROM `PLD_COMMENT` c
left outer join `PLD_USER` u ON (u.ID = c.USER_ID)
left outer join `PLD_LINK` l ON (l.ID = c.ITEM_ID)
group by c.ITEM_ID, c.USER_ID
ORDER BY c.USER_ID, l.ID
Beispiel: Wenn Sie die folgenden Beispieldaten haben:
-
PLD_LINK:
ID STATUS TITLE 1 1 title1 2 2 title2
-
PLD_USER:
ID NAME 8 Mahmoud 9 Ahmed
-
PLD_COMMENT:
ID ITEM_ID USER_ID STATUS 4 1 8 1 5 1 8 1 6 1 8 1 7 2 8 2 8 2 8 2 9 1 9 1 10 1 9 1
Fall 1:der Benutzer Mahmoud
wird zweimal angezeigt:
Dann gibt Ihnen die vorherige Abfrage die Anzahl der Kommentare für jeden Benutzer und auch für jedes Element, wie folgt:
total_commments_user ID ITEM_ID USER_ID Name
3 4 1 8 Mahmoud
2 7 2 8 Mahmoud
2 9 1 9 Ahmed
Beachten Sie, dass der Benutzer Mahmoud
wird zweimal mit unterschiedlicher Anzahl angezeigt, da er eine andere Item_Id
hat .
Fall 2:der Benutzer Mahmoud
wird nur einmal angezeigt:
Wenn Sie die Anzahl der Kommentare für jeden Benutzer für alle Elemente erhalten möchten, müssen Sie nur nach der USER_ID
gruppieren und Sie erhalten:
total_commments_user ID ITEM_ID USER_ID Name
5 4 1 8 Mahmoud
3 9 1 9 Ahmed
Wie Sie jetzt sehen können, ist der Benutzer Mahmoud
wird nur einmal angezeigt, da wir Item_Id
eingegeben haben .
Sie können dann nach Status oder was auch immer filtern.