MySQL GREATEST () не работает в предложении ORDER BY - PullRequest
1 голос
/ 17 апреля 2020

В следующем запросе у меня возникла проблема. Функция GREATEST() здесь не работает в предложении ORDER BY. Я хочу отсортировать результаты на основе двух временных меток из двух разных таблиц внутри функции GREATEST(). Это не дает относительный результат в соответствии с самой последней датой. Что здесь не так? Я что-то упустил?

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
INNER 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 AND R1.swp_to = MSG.msg_to) OR (R1.swp_by = MSG.msg_from AND 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 GREATEST(MSG.msg_time, R1.swp_date) DESC

Я прикрепил ниже скрипку со всеми моими таблицами и данными в запросе выше.

Скрипка здесь: SQL Скрипка

1 Ответ

0 голосов
/ 17 апреля 2020

Данные, имеющиеся в вашем примере, не отвечают на ЛЕВЫЕ Соединения с таблицей сообщений, в точности R1.swp_to = MSG.msg_t и R1.swp_to = MSG.msg_from

LEFT JOIN messages AS MSG ON
((R1.swp_to = MSG.msg_from AND R1.swp_to = MSG.msg_to) 
OR (R1.swp_by = MSG.msg_from AND R1.swp_by = MSG.msg_to))

вы можете найти здесь измененный пример для ваших данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...