Devi aggiungere tutte le colonne che stai selezionando in SELECT
clausola eccetto il c.USER_ID
al GROUP BY
clausola, come questa:
group by c.ID, c.otherfields, l.title,..
MODIFICA: Penso che quanto segue funzionerà correttamente:
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
Esempio: Se disponi dei seguenti dati di esempio:
-
PLD_LINK:
ID STATUS TITLE 1 1 title1 2 2 title2
-
PLD_USER:
ID NAME 8 Mahmoud 9 Ahmed
-
COMMENTO_PLD:
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:l'utente Mahmoud
viene visualizzato due volte:
Quindi, la query precedente ti darà il conteggio dei commenti per ogni Utente e anche per ogni elemento, in questo modo:
total_commments_user ID ITEM_ID USER_ID Name
3 4 1 8 Mahmoud
2 7 2 8 Mahmoud
2 9 1 9 Ahmed
Notare che l'utente Mahmoud
viene visualizzato due volte con un conteggio diverso, perché ha un Item_Id
diverso .
Caso 2:l'utente Mahmoud
viene visualizzato una sola volta:
Se vuoi ottenere il conteggio dei commenti per ogni utente per tutti gli elementi, dovrai raggruppare solo per USER_ID
e avrai:
total_commments_user ID ITEM_ID USER_ID Name
5 4 1 8 Mahmoud
3 9 1 9 Ahmed
Come puoi vedere ora l'utente Mahmoud
viene visualizzato solo una volta, perché abbiamo inserito Item_Id
.
Puoi quindi filtrare per stato o altro.