按到期日期对结果进行排序,最后到期

时间:2020-04-30 02:37:27

标签: php mysql sorting

我正在使用Mysql和PHP。我需要根据到期日期对结果进行排序。未过期的结果首先按升序排列,最后过期的按降序排列。

我正在使用以下查询:

SELECT * FROM `artist` WHERE L_Name

例如,考虑以下值:

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

如何使用MySQL和PHP有效地实现这一目标?

1 个答案:

答案 0 :(得分:3)

您可以向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

Demo on dbfiddle