从对话中选择最后一条消息(两个用户之间的一条消息)

46scxncf  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(282)

我有一个简单的聊天应用程序,我需要得到两个用户之间每次对话的最后一条消息( user1 成为你)
这是我的table

| id | sender_id | receiver_id | message | timestamp |

这是我的查询,但它返回两个用户的最后一条消息,而不是两个用户之间的最后一条消息

SELECT *
FROM (SELECT DISTINCT * FROM chat WHERE (sender_id='user_id' OR receiver_id='user_id')
ORDER BY timestamp DESC) as m GROUP BY `sender_id`

所以我只需要两个用户之间的最后一条消息,而不是两条消息
编辑
我在该表中存储了多个会话,因此我希望它从用户所在的所有会话中提取最后一条消息。因此,如果我与3个人聊天,它应该返回3条消息,每条消息是该对话的最后一条消息

sqserrrh

sqserrrh1#

使用此选项:

SELECT chat.*
  FROM chat
  JOIN (  
         SELECT MAX(id) id
           FROM chat
          WHERE (sender_id='user_id' OR receiver_id='user_id')
       ) x ON chat.id = x.id

子查询将找到与您的条件匹配的最大chat.id值(可能意味着最新消息)。然后join过滤聊天表以仅显示该条目。
或者,更简单地说,您可以使用查询的变体。但不会这么快。

SELECT * 
  FROM chat 
 WHERE (sender_id='user_id' OR receiver_id='user_id')
ORDER BY timestamp DESC
LIMIT 1

相关问题