Сортировка до текущей даты по возрастанию, после - по убыванию - MySQL
Формулировка задачи:
Знатоки, помогите составить запрос.
Есть таблица "matches":
--------------------------
id | start
--------------------------
1 | 2017-01-10 10:00:00
--------------------------
2 | 2017-01-12 20:00:00
--------------------------
3 | 2017-01-18 00:00:00
--------------------------
4 | 2017-01-20 20:00:00
--------------------------
5 | 2017-01-21 22:00:00
--------------------------
6 | 2017-01-25 22:00:00
--------------------------
Как правильно составить запрос, чтобы сначала выводились до до текущей даты по возрастанию, после по убыванию?
На ум пришел такой запрос, но в нем все либо по убыванию, либо по возрастанию:
Вернее наоборот. Сначала после текущей даты по возрастанию, а после до текущей даты по убыванию.
SELECT * FROM `matches` ORDER BY CASE WHEN `start` < NOW() THEN `start` END DESC
Как правильно составить запрос, чтобы сначала выводились до до текущей даты по возрастанию, после по убыванию?
Решение задачи: «Сортировка до текущей даты по возрастанию, после - по убыванию»
textual
Листинг программы
SELECT * FROM (SELECT * FROM matches WHERE START >= NOW() ORDER BY START ASC) AS after UNION SELECT * FROM (SELECT * FROM matches WHERE START < NOW() ORDER BY START DESC) AS BEFORE
Объяснение кода листинга программы
В этом коде используется подзапрос для извлечения данных из таблицы matches
и последующее объединение результатов двух сортировок.
- SELECT * FROM matches WHERE START >= NOW() ORDER BY START ASC
- SELECT * FROM matches WHERE START < NOW() ORDER BY START DESC
- UNION
- SELECT FROM (SELECT FROM matches WHERE START >= NOW() ORDER BY START ASC) AS after
- UNION
- SELECT FROM (SELECT FROM matches WHERE START < NOW() ORDER BY START DESC) AS BEFORE
- LIMIT 20;
- Окончательный результат выводится и ограничивается 20 строками.
Пояснение:
- Линии 1 и 2 выполняют сортировку данных в соответствии с условием WHERE.
- Линия 3 UNION объединяет результаты двух предыдущих запросов.
- Линии 4 и 5 выполняют сортировку данных в соответствии с условием WHERE и присваивают псевдонимы
after
иbefore
. - Линия 6 выполняет объединение результатов двух предыдущих запросов с использованием псевдонима
before
. - Линия 7 ограничивает количество возвращаемых строк до 20.
- Окончательный результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д