Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

contagem mysql não está funcionando corretamente?


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.