php - 按过期日期对结果进行排序,最后过期
问题描述
我正在使用 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 有效地实现这一目标?
解决方案
您可以向您添加一个条件表达式,ORDER BY
当expire_date
通过时返回 1,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