【问题标题】:Select last message from conversation (one message between two users)从对话中选择最后一条消息(两个用户之间的一条消息)
【发布时间】:2018-06-19 09:55:46
【问题描述】:

我有一个简单的聊天应用程序,我需要在其中获取两个用户之间每次对话的最后一条消息(user1 是你)

这是我的桌子

| 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 条消息,每条消息都是该对话的最后一条

【问题讨论】:

  • 请在您的问题中包含示例数据、表格定义和预期输出

标签: mysql


【解决方案1】:

使用这个:

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 值(可能是指最新消息)。然后加入过滤聊天表以仅显示该条目。

或者,更简单地说,您可以使用查询的变体。但这不会那么快。

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

【讨论】:

  • 这将在所有对话之间仅返回一条消息。我忘了提到该表存储多个对话,所以我想要每个对话的最后一条消息。我编辑了我的问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-20
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多