Трябва да добавите всички колони, които избирате в SELECT
клауза с изключение на c.USER_ID
към GROUP BY
клауза, като тази:
group by c.ID, c.otherfields, l.title,..
РЕДАКТИРАНЕ: Мисля, че следното ще работи правилно:
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
Пример: Ако имате следните примерни данни:
-
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
Случай 1:потребителят Mahmoud
се показва два пъти:
След това предишната заявка ще ви даде броя на коментарите за всеки потребител и за всеки елемент, както следва:
total_commments_user ID ITEM_ID USER_ID Name
3 4 1 8 Mahmoud
2 7 2 8 Mahmoud
2 9 1 9 Ahmed
Забележете, че потребителят Mahmoud
се показва два пъти с различен брой, тъй като има различен Item_Id
.
Случай 2:потребителят Mahmoud
се показва само веднъж:
Ако искате да получите броя на коментарите за всеки потребител за всички елементи, тогава ще трябва да групирате само по USER_ID
и ще получите:
total_commments_user ID ITEM_ID USER_ID Name
5 4 1 8 Mahmoud
3 9 1 9 Ahmed
Както можете да видите сега потребителят Mahmoud
се показва само веднъж, тъй като сме записали Item_Id
.
След това можете да филтрирате по статус или каквото и да било.