gpt4 book ai didi

mysql - SQL - 从每个对话中获取最后一条消息

转载 作者:可可西里 更新时间:2023-11-01 08:04:05 25 4
gpt4 key购买 nike

我有一个 SQL 表,其中包含所有用户和组对话。我可以轻松地从中检索群组对话,但不知道如何从中检索每个用户的最后一条消息。

列说明:

message_id:不言自明

group_id:由于对话还包含群组消息,我将使用 group_id 来过滤这些消息,而不是为其创建新的消息传递表。

用户:发件人/收件人(通过定义最后一列“isReceived”的值,它既可以是发件人也可以是收件人)。

消息:不言自明

创作不言自明

isSeen:如果消息已被用户(接收者)看到。

isError:如果发送消息时出现错误。

isReceived:检查消息是否被默认用户接收或发送。

现在我真正想要的是检索所有对话的最后一条消息,无论是发送还是接收。例如,'Sondre'(另一个用户)给我发了一条消息“嗨”,现在我给他发了一条回复/消息“你好”,当我从消息表中检索数据时,我希望显示我的回复而不是他的回复。我还上传了当前数据的照片和使用我想要的查询的数据:

消息表数据:

enter image description here

我想要使用查询的数据:

enter image description here

最佳答案

您需要分两部分进行,首先获取最新消息,按用户分组然后根据这些获取您的消息

最简单的答案是(如果你真的有 message_id 一个唯一/主键,它会工作得很好)

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 这样的唯一/主键列,Abvove 也能正常工作,但如果您真的有它,那么我建议使用 message_id 而不是创建

你可以看到实现SQL Fiddle Demo

关于mysql - SQL - 从每个对话中获取最后一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38595845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com