Как выполнить сортировку дат используя только ORDER BY в следующем порядке:
На данный момент SQL запрос выглядит так:
SELECT * FROM table
ORDER BY
CASE WHEN TIMESTAMP(`time`) > TIMESTAMP(CURDATE()) THEN 1 ELSE 0 END DESC,
CASE WHEN TIMESTAMP(`time`) = TIMESTAMP(CURDATE()) THEN 1 ELSE 0 END DESC,
CASE WHEN TIMESTAMP(`time`) < TIMESTAMP(CURDATE()) THEN 0 ELSE 1 END DESC, time ASC
Но в прошедших датах порядок получается от самой дальней до самой ближней даты
Навскидку
ORDER BY SIGN(TIMESTAMPDIFF(day, TIMESTAMP(`time`), TIMESTAMP(CURDATE())))
,ABS(TIMESTAMPDIFF(day, TIMESTAMP(`time`), TIMESTAMP(CURDATE())))
time - DATETIME – Strange Tin 39 секунд назад
Тогда убрать преобразование в timestamp и использовать DATEDIFF().
fiddle
Сборка персонального компьютера от Artline: умный выбор для современных пользователей