Добрый вечер! SQL знаю на пальцах, но очень нужно отсортировать таблицу: Сначала идут даты с сегодняшнего дня и будущие в обратном порядке, За ними даты прошедшие в прямом порядке. Т.е., например, есть таблица: date 2017-09-02 2017-09-08 2017-09-16 2017-10-20 2017-05-08 2017-08-29 2017-08-15 Сегодня, к примеру, 2017-08-29 Нужно чтобы вывело: date 2017-08-29 2017-09-02 2017-09-08 2017-09-16 2017-10-20 (дальше старые даты) 2017-08-15 2017-05-08 Мой код: PHP: ( SELECT date FROM tb WHERE date>= CURDATE( ) ORDER BY date ASC ) UNION ( SELECT date FROM tb WHERE date< CURDATE( ) ORDER BY date DESC ) Выводит ерунду: date 2017-09-02 2017-09-08 2017-09-16 2017-10-20 2017-08-29 2017-05-08 2017-08-15
Удалила везде ORDER BY, результат такой же. То есть не работает сортировка. В любом случае выбирает сначала все даты будущие (без сортировки), а потом все даты прошедшие. Как сделать, чтобы даты сортировались в кусках?
Да, отдельно PHP: SELECT date FROM tb WHERE date>= CURDATE( ) ORDER BY date ASC работает, как и вторая часть
В доке же черным по белому написано: Use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows А задача решается и без объединений. Код (Text): SELECT date FROM tb ORDER BY date >= CURDATE() DESC, CASE WHEN date >= CURDATE() THEN date END ASC, CASE WHEN date < CURDATE() THEN date END DESC