一个对话包含消息,一条消息可以发送给 2 个或更多用户。
目标是按用户检索每个对话的最后一条消息,因此每个对话中的消息都是最新的。
还有message_user.time
就是当用户已经阅读了消息,所以当它等于0时,这意味着消息还没有被阅读,所以如果第一个顺序是时间等于0的message_user和消息,那就更好了.time 是最大的数字。
我有那些桌子
留言用户
user message time
-----|------------|-------
7 | 1 | 0
8 | 1 | 0
7 | 2 | 300
8 | 2 | 300
7 | 3 | 400
信息
id text conversation time
---|-------------|--------------|----------
1 | blah blah1 | 1 | 200
2 | blah blah2 | 1 | 300
3 | blah blah3 | 2 | 400
4 | blah blah4 | 2 | 500
目标是按对话对消息进行分组,然后获取链接到该对话的最后一个 message_user,该对话首先具有较大的时间戳。
我试过的是这个,但我没有收到最后一条消息(错误的顺序)
SELECT m.user, mu.message, mu.time, mu.id, m.text, m.time as message_time, m.conversation
FROM message_user as mu,message as m
WHERE mu.message=m.id AND mu.user=8
GROUP BY m.conversation
ORDER BY m.time DESC';
然后下一步将是: 我不知道是否有可能,但如果 order by 可以输出 message_user ,其中时间首先等于 0,然后第二个 order 是 message.time (我什至不知道它是否可能在一个完美的请求中!)
对于用户 8,输出应该是这样的:
text conversation
-----------|------------
blah blah1 | 1 //because message_user.time = 0 (means message is unread)
blah blah3 | 2 //because message.time is the highest in the conversation
谢谢 !