mysql - IF ... ELSE или CASE в операторе ORDER BY - PullRequest
1 голос
/ 14 апреля 2020

В моем запросе ниже я не получаю желаемый результат. Я хочу, чтобы результаты сортировались в соответствии с последним событием события на основе двух разных полей даты в двух разных таблицах. Давайте сначала посмотрим на запрос.

SELECT R1.swp_to, R1.swp_type, R1.swp_date, M.mem_fname, M.mem_lname, M.mem_last_activity, DP.dp_photo, GREATEST(R1.swp_date, R2.swp_date) FROM swipes AS R1
LEFT JOIN swipes AS R2 ON(R1.swp_to = R2.swp_by AND R2.swp_to = R1.swp_by AND R2.swp_type <> 'left')
LEFT JOIN members AS M ON(R1.swp_to = M.mem_id)
LEFT JOIN display_photos AS DP ON(R1.swp_to = DP.dp_mem AND DP.dp_index = 1)
LEFT JOIN messages as MSG ON ((R1.swp_to = MSG.msg_from OR R1.swp_to = MSG.msg_to) AND (R1.swp_by = MSG.msg_from OR R1.swp_by = MSG.msg_to))
WHERE R1.swp_by = :mem AND R2.swp_by IS NOT NULL AND R1.swp_type <> 'left'
ORDER BY IF(MSG.msg_time IS NULL, 0, 1), R1.swp_date

Здесь в выражении ORDER BY мы видим, что есть два поля TIME msg_time и swp_date. При каждом новом совпадении swp_date обновлений и при появлении нового сообщения msg_time обновлений. Записи, извлеченные с использованием этого запроса, должны быть отсортированы в соответствии с последним событием события (какая дата является самой ранней из двух). Мои текущие ORDER BY заявления не соответствуют требованию. Что мне здесь не хватает?

1 Ответ

1 голос
/ 14 апреля 2020

Вы можете использовать функцию GREATEST():

ORDER BY GREATEST(COALESCE(MSG.msg_time, R1.swp_date), R1.swp_date) DESC
...