Mysql仅在2个字段上使用DISTINCT

时间:2011-07-08 10:08:18

标签: mysql group-by distinct

我有一个mysql数据库表如下

  

id | uid | touid |消息|时间

此数据库具有从一个人发送给另一个人的消息。我需要获取在我和所有其他用户之间传输的最新消息。

目前我使用的查询如下:

SELECT uid, touid, message, time
FROM messages
WHERE uid = "'.$currentuser.'"
    OR touid = "'.$currentuser.'"
ORDER by time DESC;

这将获得我和任何其他用户之间的所有消息。但我只需要显示我和所有其他用户之间传输的最新消息。

尝试使用GROUP BY,但排序受到影响。还有其他解决方案吗?

有什么想法吗?如果我不清楚请发表评论

4 个答案:

答案 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;