MySQL查询以显示登录用户与其他用户之间的聊天记录

时间:2017-10-05 05:15:32

标签: mysql chat

在网络应用中开发用户聊天。

目标:以desc顺序显示用户登录用户聊天并靠近每个此类用户的用户列表 - 最后一条消息(由该用户或登录用户编写)。

当前的MySQL查询:

SELECT id,
       user_to,
       user_from,
       body, 
       msg_time
FROM chat
WHERE id IN (SELECT MAX(id) 
             FROM chat WHERE user_to=:id 
             OR user_from=:id
             GROUP BY user_to,user_from)
ORDER BY msg_time DESC

运作良好。但!对于任何用户A与任何用户B的聊天,当前请求显示2行:一行包含用户A发送给用户B的最新消息,一行最近消息由用户B发送给用户A.虽然我需要1行(在“行”下我指的是一个引导数据行,其中第1列是与之进行聊天的用户的图标,第2列是这2个用户之间的最新消息,第3列是最后一个消息的时间。)

但是,请求应显示用户A和用户B进行了聊天,并且只显示此一次,并在用户A和B之间发布最新消息。

把我的大脑吹过来。我想让查询保持简短,感觉我很接近,但最终无法解决这个问题。谢谢你的建议!

1 个答案:

答案 0 :(得分:0)

您可以尝试此操作并将user_id替换为当前登录的用户ID,然后尝试

SELECT id,
   user_to,
   user_from,
   body, 
   msg_time
   FROM chat
 WHERE id IN (SELECT MAX(id) 
         FROM chat WHERE user_to=:id 
         OR user_from=:id
 GROUP BY IF (`user_from`=:user_id, `user_to`,`user_from`) )
 ORDER BY msg_time DESC