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

标签 php mysql sql database

这里我扩展我之前的问题。

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”和时间戳是 jack 回复的时间戳。

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

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

最佳答案

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

为此,我建议更改您的数据结构,类似于此处讨论的内容:Is there a simpler way to achieve this style of user messaging?

关于php - 私聊系统MYSQL查询显示发送/接收者最后一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10941763/

相关文章:

php - 添加斜杠可以安全地防止数组中的 xss?

php - 删除字符串中以两个斜杠开头的单词

php - 从搜索查询中删除 "www."

mysql - 表中记录的顺序重要吗?

php - MySQL在一个查询中应用多个条件

mysql - 字符值的 Oracle Between 运算符

php - 可以创建一个 cron 作业来删除我在 mysql 数据库中的数据吗?

MySQL SQL语法给出列错误

mysql - MySQL查询缓存文件保存在哪里?

MYSQL - 如何让3行数据变成1行数据