Сортировать результаты по дате истечения срока действия с истекшим в конце - PullRequest
2 голосов
/ 30 апреля 2020

Я работаю с Mysql и PHP. Мне нужно отсортировать результаты по сроку годности. Сначала не просроченные результаты, в порядке возрастания, а в конце - по убыванию.

Я использую следующий запрос:

SELECT * FROM `promos` ORDER BY `expire_date` ASC LIMIT 0,10

Например, учитывая эти значения:

ID  expire_date
1   2020-05-07 03:30:00
2   2020-05-03 17:00:00
3   2020-04-28 23:30:00
4   2020-05-12 09:00:00
5   2020-03-29 12:00:00
6   2020-04-17 15:00:00

Мне нужно получить следующий заказ:

ID  expire_date
2   2020-05-03 17:00:00  / ASC
1   2020-05-07 03:30:00  / ASC
4   2020-05-12 09:00:00  / ASC
3   2020-04-28 23:30:00  / DESC EXPIRED
6   2020-04-17 15:00:00  / DESC EXPIRED
5   2020-03-29 12:00:00  / DESC EXPIRED

Как мне добиться этого эффективно, используя MySQL и PHP?

1 Ответ

3 голосов
/ 30 апреля 2020

Вы можете добавить условное выражение к вашему ORDER BY, которое возвращает 1, когда прошло expire_date, и 0 в противном случае; это приведет к сортировке значений с истекшим сроком в конце:

SELECT * 
FROM `promos` 
ORDER BY `expire_date` < CURDATE(), `expire_date` ASC
LIMIT 0,10

Для сортировки дат с истекшим сроком по убыванию вам нужно сначала отсортировать по expire_date по возрастанию, если не истек срок действия, а затем по expire_date по убыванию:

SELECT *
FROM `promos` 
ORDER BY CASE WHEN `expire_date` >= CURDATE() THEN `expire_date`
              ELSE '9999-99-99' 
         END ASC,
         `expire_date` DESC
LIMIT 0,10

Демонстрация по dbfiddle

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