我在MYSQL中有一个数据库,它的聊天表如下所示。



我正在使用此查询来获取这些记录

SELECT * FROM (
    SELECT * FROM `user_chats`
    WHERE sender_id =2 OR receiver_id =2
    ORDER BY id DESC
) AS tbl
GROUP BY sender_id, receiver_id


但我的要求只是5,4个ID的记录。基本上我的要求id提取2个用户之间的最后一次对话。这里在2和3之间的用户对话中有2条记录,我们只希望它们中的最后一条,即id = 5,这里不需要id = 2。

那么我们如何为该结果编写查询呢?

最佳答案

SELECT
 *
FROM
 user_chats uc
WHERE
 not exists (
   SELECT
    1
   FROM
     user_chats uc2
   WHERE
     uc2.created > uc.created AND
     (
       (uc.sender_id = uc2.sender_id AND uc.reciever_id = uc2.reciever_id) OR
       (uc.sender_id = uc2.reciever_id AND uc.reciever_id = uc2.sender_id)
     )
  )

08-19 10:43