Mysql语句从两列中选择不同的行

时间:2014-11-03 03:47:47

标签: mysql group-by distinct

我试图编写一个只从我的聊天系统中提取唯一消息的mysql语句。 有一个to_id和一个from_id。我想从每次谈话中拉一行。

问题是如果有一行     to_id = 1     from_id = 2 和另一行     to_id = 2     from_id = 1 我希望这两行都被视为相同。

我提出的陈述是" SELECT * FROM chat_messages GROUP BY to_id,from_id"。这适用于我上面提到的情况。

我做的另一个尝试是使用" SELECT DISTINCT least(to_id,from_id)作为value1,最大(to_id,from_id)作为来自chat_messages"的值2。

这会返回我需要的内容,但我不知道如何从行中获取其余信息,如消息,时间戳等。它只给我value1& value2是to_id& from_id。

2 个答案:

答案 0 :(得分:3)

只需在第二个查询中使用第一个查询的GROUP BY中的表达式:

SELECT * FROM chat_messages GROUP BY LEAST(to_id,from_id), GREATEST(to_id,from_id)

答案 1 :(得分:0)

如果第二个查询返回您期望的内容,则下面的查询将返回休息信息:

SELECT *
FROM chat_messages t1 INNER JOIN (
    SELECT DISTINCT LEAST(to_id, from_id) AS value1,
        GREATEST(to_id, from_id) AS value2
    FROM chat_messages
) t2 ON t1.to_id = value1 AND t1.from_id = value2;