SQL - 从每个对话中获取最后一条消息
SQL - Get last message from each conversation
我有一个 SQL table,其中包含所有用户和群组对话。我可以轻松地从中检索群组对话,但不知道如何从中检索每个用户的最后一条消息。
列说明:
• message_id: 不言自明
• group_id: 由于对话还包含群组消息,我将使用 group_id 来过滤这些消息,而不是创建新消息 table为了它。
• user: Sender/Receiver(通过在最后一列 'isReceived' 上定义值,它既可以是发送者也可以是接收者)。
• 消息: 不言自明
• 创作: 不言自明
• isSeen: 如果消息已被用户(接收者)看到。
• isError: 如果发送消息时出错。
• isReceived: 检查消息是否被默认用户接收或发送。
现在我真正想要的是检索所有对话的最后一条消息,无论是发送还是接收。例如,'Sondre'(另一个用户)给我发了一条消息 "Hi",现在我给他发了一条 reply/message "Hello",当我从消息 table 中检索数据时,我想要显示我的回复而不是他的。我还上传了当前数据的照片和使用我想要的查询的数据:
消息数据table:
我想要使用查询的数据:
您需要分两部分进行,首先获取最新消息,按用户分组
然后根据这些
获取您的消息
最简单的答案是(如果你真的有 message_id 一个 unique/primary 键就可以了)
select * from messages where message_id in
(select max(message_id) from messages group by user)
它会给你每个用户的最新消息,你也可以用其他东西而不是用户来分组
您需要的更好的版本(为了更好的性能和可扩展性)是
select messages.* from messages
join
(select max(creation) maxtime,user from messages group by user) latest
on messages.creation=latest.maxtime and messages.user=latest.user;
即使您没有像 message_id 这样的 unique/primary 键列,Abvove 也会起作用,但如果您真的有它,那么我建议您使用 message_id 而不是创建
你可以看到实现了SQL Fiddle Demo
我有一个 SQL table,其中包含所有用户和群组对话。我可以轻松地从中检索群组对话,但不知道如何从中检索每个用户的最后一条消息。
列说明:
• message_id: 不言自明
• group_id: 由于对话还包含群组消息,我将使用 group_id 来过滤这些消息,而不是创建新消息 table为了它。
• user: Sender/Receiver(通过在最后一列 'isReceived' 上定义值,它既可以是发送者也可以是接收者)。
• 消息: 不言自明
• 创作: 不言自明
• isSeen: 如果消息已被用户(接收者)看到。
• isError: 如果发送消息时出错。
• isReceived: 检查消息是否被默认用户接收或发送。
现在我真正想要的是检索所有对话的最后一条消息,无论是发送还是接收。例如,'Sondre'(另一个用户)给我发了一条消息 "Hi",现在我给他发了一条 reply/message "Hello",当我从消息 table 中检索数据时,我想要显示我的回复而不是他的。我还上传了当前数据的照片和使用我想要的查询的数据:
消息数据table:
我想要使用查询的数据:
您需要分两部分进行,首先获取最新消息,按用户分组 然后根据这些
获取您的消息最简单的答案是(如果你真的有 message_id 一个 unique/primary 键就可以了)
select * from messages where message_id in
(select max(message_id) from messages group by user)
它会给你每个用户的最新消息,你也可以用其他东西而不是用户来分组
您需要的更好的版本(为了更好的性能和可扩展性)是
select messages.* from messages
join
(select max(creation) maxtime,user from messages group by user) latest
on messages.creation=latest.maxtime and messages.user=latest.user;
即使您没有像 message_id 这样的 unique/primary 键列,Abvove 也会起作用,但如果您真的有它,那么我建议您使用 message_id 而不是创建
你可以看到实现了SQL Fiddle Demo