我正在构建一个聊天系统,用户 A 可以在其中与用户 B 讨论主题 X 或 Y。
我的表如下所示:
Message ID | message | sender | receiver | topic
1 Helo 1 2 X
2 Lorem 2 1 X
3 Foo 1 2 Y
4 Bar 2 1 X
5 Test 2 1 Y
6 Hello2 1 3 X
所以我想获取每个用户和主题的用户 1 最后 6 个对话的列表。目前我得到了
SELECT messageid, sender,topic, receiver AS friend FROM table WHERE sender = 1 || receiver = 1 GROUP BY topic,friend ORDER BY id DESC LIMIT 0,6
但这不会选择最后消息。因为之后我创建了这些条目的列表,并且不想在顶部显示最后的对话...
在此示例中,我需要一个如下所示的列表:
Message ID | sender | topic| friend
6 1 X 3
5 2 Y 1
4 2 X 1
通过以下选择就可以了!
select * from (从选项卡中选择 Message_ID、发送者、主题、接收者 AS friend ,其中发送者 = 1 || 接收者 = 1
按 Message_ID desc 排序) temp
按主题分组 order by Message_ID desc
有效!
最佳答案
如果您想要给定用户的最后一条消息 id 的 ID:
select (case when sender = 1 then receiver else sender end) as other,
topic, max(messageid)
from messages
where sender = 1 or receiver = 1
group by (case when sender = 1 then receiver else sender end) ;
然后您可以使用它来获取所有信息:
select m.*
from messages m join
(select (case when sender = 1 then receiver else sender end) as other,
topic, max(messageid) as messageid
from messages
where sender = 1 or receiver = 1
group by (case when sender = 1 then receiver else sender end)
) mm
on mm.messageid = m.messageid;
关于php - MySQL 选择多行/组多/顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35526439/