我试图编写一个只从我的聊天系统中提取唯一消息的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。
答案 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;