我有date_end列,我需要对其在日期大于今天的顶部排名很重要的位置。
。因此给出大于今天的日期=" 1",较小=" 0"并排序。
因此,在以下数据表中:
+----+------------+
| id | date_end |
+----+------------+
| 1 | 31-01-2018 |
+----+------------+
| 2 | 01-05-2019 |
+----+------------+
| 3 | 31-05-2018 |
+----+------------+
| 4 | 31-07-2019 |
+----+------------+
| 5 | 31-04-2020 |
+----+------------+
| 6 | 31-08-2019 |
+----+------------+
我需要虚拟添加"实际"列并按下它:
+----+------------+--------+
| id | date_end | actual |
+----+------------+--------+
| 1 | 31-01-2018 | 0 |
+----+------------+--------+
| 2 | 01-05-2019 | 0 |
+----+------------+--------+
| 3 | 31-05-2018 | 0 |
+----+------------+--------+
| 4 | 31-07-2019 | 1 |
+----+------------+--------+
| 5 | 31-04-2020 | 1 |
+----+------------+--------+
| 6 | 31-08-2019 | 1 |
+----+------------+--------+
类似:当date_end
> date(NOW(NOW(((时,请按下订购1 else 2 End
然后完全按照您的建议进行:
ORDER BY CASE WHEN date_end > curdate() THEN 1 ELSE 0 END
在MySQL中,您可以利用可以直接使用布尔表达式的事实。所以:
order by (date_end > curdate()) desc
" true">" false",因此desc
将真值放在首位。