我有一个mysql数据库表如下
id | uid | touid |消息|时间
此数据库具有从一个人发送给另一个人的消息。我需要获取在我和所有其他用户之间传输的最新消息。
目前我使用的查询如下:
SELECT uid, touid, message, time
FROM messages
WHERE uid = "'.$currentuser.'"
OR touid = "'.$currentuser.'"
ORDER by time DESC;
这将获得我和任何其他用户之间的所有消息。但我只需要显示我和所有其他用户之间传输的最新消息。
尝试使用GROUP BY,但排序受到影响。还有其他解决方案吗?
有什么想法吗?如果我不清楚请发表评论
答案 0 :(得分:1)
SELECT
m1.*
FROM
messages m1
JOIN
(SELECT UID, TOUID, MAX(time) time FROM messages GROUP BY UID, TOUID) m2
ON m1.UID=m2.UID AND m1.TOUID=m2.TOUID and m1.time=m2.time
WHERE
m1.uid = "'.$currentuser.'"
ORDER BY
m1.time DESC;
答案 1 :(得分:0)
在查询结尾添加LIMIT 1
。
答案 2 :(得分:0)
尝试用来剪切不需要的行
limit 1
答案 3 :(得分:0)
SELECT uid,touid,message,time
FROM messages AS m
JOIN (
SELECT uid,touid,MAX(time) AS time
FROM messages
WHERE uid = "'.$currentuser.'"
OR touid = "'.$currentuser.'"
) AS x ON (m.uid=x.uid,m.touid=x.touid,m.time=x.time)
ORDER BY time DESC;