【发布时间】:2015-07-13 19:53:05
【问题描述】:
我有这个问题:
SELECT DISTINCT ON (pair) *,
CASE WHEN sender_id<recipient_id
THEN (sender_id,recipient_id)
ELSE (recipient_id,sender_id)
END AS pair FROM "messages" WHERE
((recipient_id = 6 and recipient_delete = false) or
(sender_id = 6 and sender_delete = false))
GROUP BY messages.id
ORDER BY pair, created_at, unread_count DESC
带来用户对话的最新消息(用户收件箱)。
现在我需要显示每个对话的未读消息总数,“已打开”表中有一个标志,表示消息是否未读。
这是我为它写的查询:
SELECT DISTINCT ON (pair) *,
CASE WHEN sender_id<recipient_id
THEN (sender_id,recipient_id)
ELSE (recipient_id,sender_id)
END AS pair, COUNT(messages.opened= false) AS unread_count FROM "messages" WHERE
((recipient_id = 6 and recipient_delete = false) or
(sender_id = 6 and sender_delete = false))
GROUP BY messages.id
ORDER BY pair, created_at, unread_count DESC
但即使有超过 2 或 3 条消息,它也会显示计数为 1(我猜这是因为 Distinct)。
有什么想法吗?
如果您想知道为什么我们有用户CASE WHEN 功能,请查看此question:
【问题讨论】:
标签: mysql postgresql