我有对话和消息。目标是选择对话框及其未核心消息的计数。表消息有unread
字段来检测它。
我试过这个
SELECT *, count(unread) as nums
FROM dialogs JOIN messages ON dialogs.id=messages.dialog_id
GROUP BY dialogs.id
HAVING count(unread) <> 0
但始终获得消息总数
答案 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