我有一张用来保存消息的桌子和一张用来保存用户的桌子。我想获取与 user_id 1 交互(发送或接收消息)的所有用户。此查询有效:
http://sqlfiddle.com/#!2/6a2f3/1
编辑:
SELECT DISTINCT
(CASE WHEN `user_to_id` = 1 THEN `user_from_id` ELSE `user_to_id` END) `user_id`,
users.*
FROM `messages`
INNER JOIN users
ON (CASE WHEN `user_to_id` = 1 THEN `user_from_id` ELSE `user_to_id` END) = users.user_id
WHERE `user_to_id` = 1 OR `user_from_id` = 1
ORDER BY `time` DESC
但是如果我添加到 SELECTmessage
列,它会返回重复的记录:
http://sqlfiddle.com/#!2/6a2f3/2
编辑:
SELECT DISTINCT
(CASE WHEN `user_to_id` = 1 THEN `user_from_id` ELSE `user_to_id` END) `user_id`,
`messages`.`message`,
users.*
FROM `messages`
INNER JOIN users
ON (CASE WHEN `user_to_id` = 1 THEN `user_from_id` ELSE `user_to_id` END) = users.user_id
WHERE `user_to_id` = 1 OR `user_from_id` = 1
ORDER BY `time` DESC
我该如何解决?
而且,我看到它在“DISTINCT”选择之后对结果进行排序。第一个查询应该返回倒置的结果,因为message_id
2 的行有time
3。有没有办法可以在“DISTINCT”之前对它们进行排序?
编辑2:我不清楚这个问题。我只想为匹配的 user_id 选择最后一条消息。