私人聊天系统MYSQL查询显示发送者/接收者的最后一条消息

2024-05-17

在这里我延伸一下我之前的问题。

私人聊天系统MYSQL查询ORDERBY和GROUPBY https://stackoverflow.com/questions/10929366/private-chat-system-mysql-query-orderby-and-groupby

此外,我还创建了一张名为 users 的表,我可以从中获取用户信息。

消息表

  message_id|sender_id||receiver_id|message_text|   created_time
    1         101          102       Message A    2012-06-07 08:07:18
    2         101          102       Message B    2012-06-07 08:10:20
    3         103          102       Message C    2012-06-07 08:12:43

用户表:

 id  | name
 101   bob
 102   jack
 103   mark

现在我终于能够得到以下结果:

      name|message_text |  created_time
      mark   message C    2012-06-07 08:12:43
      bob    message B    2012-06-07 08:10:20

通过使用此查询:

SELECT * FROM messages,users
WHERE messages.receiver_id = 102
AND messages.sender_id=users.id
AND messages.created_time IN
(SELECT MAX(created_time)
FROM messages
GROUP BY sender_id)
ORDER BY messages.created_time DESC

现在我想要的结果是

如果 jack(id:102) 回复 mark(id:103) 那么我怎样才能得到这个输出:

      name|message_text |  created_time
      mark   message D    2012-06-07 08:12:48
      bob    message B    2012-06-07 08:10:20

注意:这里的“消息 D”和时间戳是杰克回复马克的。

其中 message_text 字段将显示 mark 和 jack 之间的最后一条消息 created_time字段将显示消息创建时间 姓名字段将显示杰克正在向其发送或接收消息的人的姓名。

我认为我们需要修改/拆分表,但不知道如何以及什么查询将完成此任务。


您要求的基本上是按线程而不是发件人进行分组。线程可以在两个人之间发起,无论是发送者/接收者。

为了实现这一目标,我建议更改您的数据结构,类似于此处讨论的内容:有没有更简单的方法来实现这种用户消息传递风格? https://stackoverflow.com/questions/10588391/is-there-a-simpler-way-to-achieve-this-style-of-user-messaging/10740169#10740169

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

私人聊天系统MYSQL查询显示发送者/接收者的最后一条消息 的相关文章

随机推荐