Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql count ne fonctionne pas correctement?

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.