U moet alle kolommen toevoegen die u selecteert in de SELECT
clausule behalve de c.USER_ID
naar de GROUP BY
clausule, zoals deze:
group by c.ID, c.otherfields, l.title,..
BEWERKEN: Ik denk dat het volgende goed zal werken:
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
Voorbeeld: Als u over de volgende voorbeeldgegevens beschikt:
-
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
Geval 1:de gebruiker Mahmoud
wordt twee keer weergegeven:
Vervolgens geeft de vorige zoekopdracht u het aantal opmerkingen voor elke gebruiker en ook voor elk item, als volgt:
total_commments_user ID ITEM_ID USER_ID Name
3 4 1 8 Mahmoud
2 7 2 8 Mahmoud
2 9 1 9 Ahmed
Merk op dat de gebruiker Mahmoud
wordt twee keer weergegeven met een andere telling, omdat hij verschillende Item_Id
. heeft .
Geval 2:de gebruiker Mahmoud
wordt slechts één keer weergegeven:
Als u het aantal opmerkingen voor elke gebruiker voor alle items wilt zien, hoeft u alleen op de USER_ID
te groeperen en je krijgt:
total_commments_user ID ITEM_ID USER_ID Name
5 4 1 8 Mahmoud
3 9 1 9 Ahmed
Zoals je nu kunt zien is de gebruiker Mahmoud
wordt slechts één keer weergegeven, omdat we Item_Id
. hebben gebruikt .
Je kunt dan filteren op status of wat dan ook.