在网络应用中开发用户聊天。
目标:以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之间发布最新消息。
把我的大脑吹过来。我想让查询保持简短,感觉我很接近,但最终无法解决这个问题。谢谢你的建议!
答案 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