【发布时间】:2013-01-18 11:29:03
【问题描述】:
我有这 3 张桌子:
messages:
id conv snd text created
1 1 1 asdasd 2012-12-15 23:10:53
3 1 1 zzz 2013-01-18 12:37:44
4 1 1 ssss 2013-01-18 12:42:01
msg_status
id msg user status
1 1 1 mine
2 1 4 unread
3 3 1 mine
4 3 4 unread
5 4 1 mine
6 4 4 unread
conv_users
conv user
1 1
1 4
2 1
2 4
2 5
这是我网站中的一个消息系统,除了这个小查询,我已经准备好了, 假设通过对话中的最后一条消息获取所有用户对话。
也就是说,如果用户 A 有 2 个对话,并且在 conv1 中有 10 条消息,而在 conv2 中只有 2 条消息,他将得到两行:convId、messageId、messageText、messageDate 等。
但问题是该消息应该是每次对话中的最后一条。
这是我已经完成的查询,但它不起作用!
SELECT
cu.conv,
msg.snd,
msg.text,
mst.status,
msg.created
FROM conv_users AS cu
INNER JOIN messages AS msg
ON cu.conv = msg.conv
INNER JOIN msg_status AS mst
ON msg.id = mst.msg
WHERE cu.user = 4
AND mst.user = 4
ORDER BY msg.created DESC
如果我添加 GROUP BY cu.conv 它会显示第一条消息,而不是我想要的最后一条消息。
【问题讨论】:
-
尝试阅读一些最近的主题。这个问题每隔六七分钟就会被问一次。
-
我认为您的表中缺少关系,请查看表
messages,您如何知道特定消息来自conv1,1或来自1,4?