Vous devez ajouter toutes les colonnes que vous sélectionnez dans le SELECT
clause sauf c.USER_ID
au GROUP BY
clause, comme ceci :
group by c.ID, c.otherfields, l.title,..
MODIF : Je pense que ce qui suit fonctionnera correctement :
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
Exemple : Si vous disposez des exemples de données suivants :
-
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
Cas 1 :l'utilisateur Mahmoud
s'affiche deux fois :
Ensuite, la requête précédente vous donnera le nombre de commentaires pour chaque utilisateur et pour chaque élément également, comme ceci :
total_commments_user ID ITEM_ID USER_ID Name
3 4 1 8 Mahmoud
2 7 2 8 Mahmoud
2 9 1 9 Ahmed
Notez que l'utilisateur Mahmoud
est affiché deux fois avec un nombre différent, car il a un Item_Id
différent .
Cas 2 :l'utilisateur Mahmoud
s'affiche une seule fois :
Si vous souhaitez obtenir le nombre de commentaires pour chaque utilisateur pour tous les éléments, vous devrez regrouper uniquement par USER_ID
et vous aurez :
total_commments_user ID ITEM_ID USER_ID Name
5 4 1 8 Mahmoud
3 9 1 9 Ahmed
Comme vous pouvez le voir maintenant, l'utilisateur Mahmoud
n'est affiché qu'une seule fois, car nous avons saisi Item_Id
.
Vous pouvez ensuite filtrer par statut ou autre.