2017-10-05 82 views
0

在Web应用程序内部开发用户聊天。MySQL查询显示登录用户和其他用户之间的聊天记录

目标:显示登录用户与之聊天并且在每个此类用户附近的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列是这两个用户之间的最新消息,第3列是最后一个消息的时间)。

但是,请求应显示用户A和用户B过话,只显示这一次,用户A和B.

之间做出的最新的消息吹我的大脑了它。我想保持查询简短,感觉我很接近,但不能最终解决这个问题。感谢您的任何建议!

+0

尝试添加像'和user_to> user_from'在内部查询打破对称 –

回答

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