Você precisa adicionar todas as colunas que está selecionando no
SELECT
cláusula exceto o c.USER_ID
para o GROUP BY
cláusula, assim:group by c.ID, c.otherfields, l.title,..
EDITAR: Acho que o seguinte funcionará corretamente:
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
Exemplo: Se você tiver os seguintes dados de exemplo:
-
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
Caso 1:o usuário Mahmoud
é exibido duas vezes:
Então, a consulta anterior lhe dará a contagem dos comentários para cada usuário e para cada item também, assim:
total_commments_user ID ITEM_ID USER_ID Name
3 4 1 8 Mahmoud
2 7 2 8 Mahmoud
2 9 1 9 Ahmed
Observe que o usuário
Mahmoud
é exibido duas vezes com uma contagem diferente, porque ele tem um Item_Id
diferente . Caso 2:o usuário Mahmoud
é exibido apenas uma vez:
Se você deseja obter a contagem de comentários de cada usuário para todos os itens, será necessário agrupar apenas pelo
USER_ID
e você terá:total_commments_user ID ITEM_ID USER_ID Name
5 4 1 8 Mahmoud
3 9 1 9 Ahmed
Como você pode ver agora, o usuário
Mahmoud
é exibido apenas uma vez, porque nós digitamos Item_Id
. Você pode filtrar por status ou o que quer que seja.