首页 > 解决方案 > 按过期日期对结果进行排序,最后过期

问题描述

我正在使用 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 有效地实现这一目标?

标签: phpmysqlsorting

解决方案


您可以向您添加一个条件表达式,ORDER BYexpire_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

dbfiddle 上的演示


推荐阅读