有条件和加入的COUNT

时间:2012-10-26 19:23:01

标签: mysql sql join count conditional-statements

我有对话和消息。目标是选择对话框及其未核心消息的计数。表消息有unread字段来检测它。

我试过这个

SELECT *, count(unread) as nums 
FROM dialogs JOIN messages ON dialogs.id=messages.dialog_id  
GROUP BY dialogs.id 
HAVING count(unread) <> 0

但始终获得消息总数

3 个答案:

答案 0 :(得分:1)

哦!按messages.id计算。 试试这个:

SELECT *, count(messages.id) as nums FROM dialogs  
      JOIN messages ON dialogs.id=messages.dialog_id  
      WHERE messages.unread = 1 
      GROUP BY dialogs.id 
      HAVING nums <> 0

messages.unread的枚举类型可能需要引用它:

SELECT *, count(messages.id) as nums FROM dialogs  
      JOIN messages ON dialogs.id=messages.dialog_id  
      WHERE messages.unread = '1' 
      GROUP BY dialogs.id 
      HAVING nums <> 0

我不知道你为什么要创建一个枚举('0','1')....

答案 1 :(得分:1)

如果你说表messages有一个列unread,那么我不明白为什么你应该计算那个列,你可能需要对这些值求和(假设可以有更多在该表上具有相同dialog_id的一条记录。所以,我会写这样的查询:

SELECT *
FROM dialogs D
INNER JOIN (SELECT dialog_id, COUNT(*) AS nums
            FROM messages
            WHERE unread = 1
            GROUP BY dialog_id) M
ON D.id = M.dialog_id  
WHERE M.nums > 0

答案 2 :(得分:1)

如果您说明“未读”是未读消息的计数,那么它总是有一个值,即使为零,也总是包含在COUNT(未读)中。

尝试插入WHERE messages.unread != 0

相关问题