如何获取最近发送消息的人排序的用户列表以显示在收件箱中

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;

【讨论】:

以上是关于如何获取最近发送消息的人排序的用户列表以显示在收件箱中的主要内容,如果未能解决你的问题,请参考以下文章

使用 Phonegap 发送短信并在收件箱中显示

ASP.NET SignalR - 无法将存储在数据库中的消息列表发送给用户

避免重复收件箱的 Listview 项目

如何将消息发送给多个收件人

我需要获取以前发送过消息的用户列表(MySQL)

RecyclerView未正确显示消息列表