如何获取最近发送消息的人排序的用户列表以显示在收件箱中
Posted
技术标签:
【中文标题】如何获取最近发送消息的人排序的用户列表以显示在收件箱中【英文标题】:How can I get list of users to display in Inbox ordered by the recent person sent the message 【发布时间】:2021-12-28 11:11:40 【问题描述】:我有一张名为 messages
的表,其中包含发送者 ID 和接收者 ID
我想要做的是获取我应该在收件箱列表中显示的所有用户。 基于给定当前用户 ID 的会话中接收或发送消息的时间戳
Here's my fiddle
这是我迄今为止尝试过的,但没有按要求工作
SELECT * FROM messages WHERE message_type = 'individual' AND sent_by = 1 GROUP BY receiver_ids
UNION
SELECT * FROM messages WHERE message_type = 'individual' AND receiver_ids = 1 GROUP BY sent_by
我希望根据发送或接收的消息按用户 ID 对记录进行分组,并按时间戳降序排列
当查看记录的用户有user_id 1
时,预期的最终输出应该是这样的
user_id | message | sent_on |
---|---|---|
3 | Message number 2 testing | 2021-12-28 08:42:33 |
2 | Message number 2 testing | 2021-12-28 08:42:33 |
【问题讨论】:
请为上面的示例写下您的预期输出。 如果它是用户的收件箱,那么你应该创建另一个表,它是与发送者、接收者和会话 ID 的对话。当 user_A 向 user_B 发送 msg 并在将 conversation_id 保存回它们之间的每条消息后,您创建了 1 个对话。然后您可以获取用户的对话并加入消息以获取最后一条消息。这就是我在我的社交网络中的做法。 让帮助您变得简单且可行 - minimal reproducible example。 @JonArmstrong 是的,确实如此,事实上,您的回答对我来说非常有效.. 是否可以同时添加最后一条消息? @fra 是的,您的解决方案似乎很容易实现,我实际上是在尝试不创建太多数据库表 【参考方案1】:请看。
SELECT sent_by,
message,
sent_on
FROM (SELECT *
FROM messages
WHERE message_type = 'individual'
AND sent_by = 1
GROUP BY receiver_ids
UNION ALL
SELECT *
FROM messages
WHERE message_type = 'individual'
AND receiver_ids = 1
GROUP BY sent_by) t
ORDER BY sent_on DESC;
【讨论】:
以上是关于如何获取最近发送消息的人排序的用户列表以显示在收件箱中的主要内容,如果未能解决你的问题,请参考以下文章