我试图从数据库中提取当前用户发送给另一个用户/从另一个用户接收的每条最后消息的列表,例如 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/