Сортировка до текущей даты по возрастанию, после - по убыванию - 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 и последующее объединение результатов двух сортировок.

  1. SELECT * FROM matches WHERE START >= NOW() ORDER BY START ASC
  2. SELECT * FROM matches WHERE START < NOW() ORDER BY START DESC
  3. UNION
  4. SELECT FROM (SELECT FROM matches WHERE START >= NOW() ORDER BY START ASC) AS after
  5. UNION
  6. SELECT FROM (SELECT FROM matches WHERE START < NOW() ORDER BY START DESC) AS BEFORE
  7. LIMIT 20;
  8. Окончательный результат выводится и ограничивается 20 строками. Пояснение:
    • Линии 1 и 2 выполняют сортировку данных в соответствии с условием WHERE.
    • Линия 3 UNION объединяет результаты двух предыдущих запросов.
    • Линии 4 и 5 выполняют сортировку данных в соответствии с условием WHERE и присваивают псевдонимы after и before.
    • Линия 6 выполняет объединение результатов двух предыдущих запросов с использованием псевдонима before.
    • Линия 7 ограничивает количество возвращаемых строк до 20.
    • Окончательный результат выводится на экран.

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы