按另一列从union select排序列

e4yzc0pl  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(251)

我有一张table:
消息

id, user_from_id, user_to_id, send_date, message, is_readed

我想选择与我聊天的所有用户,因此我的查询如下所示:

SELECT user_from_id as user_id
FROM message
WHERE user_to_id=xxx
UNION
SELECT user_to_id
FROM message
WHERE user_from_id=xxx

..我有一个用户id的列表,问题是我找不到通过发送数据来订购这些id的方法,所以在列表的开头我会有一个最近和我聊天的用户
有人能帮我吗?

kmb7vmvb

kmb7vmvb1#

不喝点酒怎么样 union ?

SELECT (CASE WHEN m.user_to_id = xxx THEN m.user_from_id
             ELSE m.user_to_id
        END) as user_id
FROM message m
WHERE xxx IN (m.user_to_id, m.user_from_id)
ORDER BY m.send_date DESC;

这可能不是您真正想要的,因为用户将在列表中出现多次。你真正想要的是:

SELECT (CASE WHEN m.user_to_id = xxx THEN m.user_from_id
             ELSE m.user_to_id
        END) as user_id
FROM message m
WHERE xxx IN (m.user_to_id, m.user_from_id)
GROUP BY m.user_id
ORDER BY MAX(m.send_date) DESC;
dgiusagp

dgiusagp2#

with x as(
SELECT user_from_id as user_id, send_date
FROM message
WHERE user_to_id=xxx
UNION
SELECT user_to_id, send_date
FROM message
WHERE user_from_id=xxx
) select user_id 
from x 
order by send_date

这包裹了 UNION 向上查询 send_date 列转换为单个变量,然后可以从中 SELECT 以及 ORDER BY send_date .

相关问题