столбец заказа из объединения выберите другой столбец - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть таблица:

Сообщение

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

.. и у меня есть список user_id, проблема в том, что я не могу найти способ упорядочить эти идентификаторы по send_data, так что в начале этого списка у меня будетпользователь, с которым я в последнее время общаюсь

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018
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.

0 голосов
/ 23 ноября 2018

Как насчет отказа от 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;
...