php - 获取与其他用户的所有对话之间的最新消息

标签 php mysql sql messaging

我试图从数据库中提取当前用户发送给另一个用户/从另一个用户接收的每条最后消息的列表,例如 Facebook 当前消息框(包含“对话”列表)

示例数据:

msg_id sender_id target_id date_sent content ...
  1        2         4        20       bla   ...
  2        2         5        21       bla   ...
  3        2         6        22       bla   ...
  4        4         2        25       bla   ...
  5        5         6        26       bla   ...
  6        4         2        50       bla   ...

如果当前用户是 2,那么我只想获取 2 与其他人(发送或接收)的最后一条消息

希望的数据是:

msg_id sender_id target_id date_sent content ...
  6        4         2        50       bla   ...
  2        2         5        21       bla   ...
  3        2         6        22       bla   ...

msg_id 6 存在是因为在所有消息 2 和 4 中(无论发送者/接收者是谁)它具有最大的日期 (50) msg_id 2 和 3 在那里,因为这是 2 与用户 5 和 6 对话的最新消息(每人一条消息,已发送)

找不到解决此问题的方法,是否应该在某个包含发送者 ID 和接收者 ID 的唯一生成的字段上使用 group_by?不知道,请帮忙

更新:

我喜欢这些想法,最终我用另一个新字段创建了该表的 View ,其中包含两个 Id 按顺序串联(较大的在前),并用下划线分隔。这样,该字段对于每个对话都是唯一的。然后按它分组:)

最佳答案

这是一个未经测试的示例。还有其他方法可以做到这一点,如果您进行搜索,这是一个非常常见的问题。

SELECT t1.*
FROM 
  msg_table AS t1
LEFT JOIN msg_table AS t2
  ON ((t1.sender_id = t2.sender_id AND t1.target_id = t2.target_id) 
    OR (t1.sender_id = t2.target_id AND t1.target_id = t2.sender_id))
    AND t1.msg_id < t2.msg_id
WHERE (t1.sender_id = ? OR t1.target_id = ?) AND t2.msg_id IS NULL

关于php - 获取与其他用户的所有对话之间的最新消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14435493/

相关文章:

PHP PDO session 将我重定向到登录页面

mysql - ruby 和 mysql gem 不兼容

Php 在错误处理时重定向到错误的 URL(登录)

php - 从多维数组中删除最后一项并将剩余项插入 MySql

mysql - 按组按 SQL 分类

mysql - 将 1,600,000 行数据上传到 mysql 数据库的最佳方法是什么?

php - 我如何获取 php 中最后一个受影响的表

mysql - 如何使用最新时间戳更新行

php - 用 AJAX 填充 PHP 变量?

sql - 如何在 SQL Server 2005 中的一条语句中更新两个表?