我有一个SQL表,其中包含所有用户和组中的对话。我可以轻松地从中检索群组对话,但不知道如何从中检索每个用户的最后消息。
• message_id:自我解释
• group_id:由于会话还包含群组消息,因此我将使用group_id过滤这些消息,而不是为其创建新的消息传递表。
•用户:发件人/收件人(通过定义最后一栏'isReceived'的值,可以是发件人或收件人)。
•消息:自我解释
•创作:自我解释
• isSeen:如果用户(接收方)已看到该消息。
• isError:如果发送邮件时出错。
• isReceived:检查邮件是否已被默认用户接收或发送。
现在我真正想要的是检索所有会话的最后消息,无论是发送还是接收。例如,'Sondre'(另一个用户)给我发了一条消息“嗨”,现在我给他发了一条回复/消息“你好”,当我从消息表中检索数据时,我希望我的回复显示而不是他的回复。我还使用我想要的查询上传了当前数据和数据的照片:
消息数据表:
我想要使用查询的数据:
答案 0 :(得分:4)
您需要分两部分来完成最新消息,按用户分组 然后根据这些
获取您的邮件最简单的答案是(如果你真的有一个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