MySQL 按日期和布尔优先级排序:迄今为止的数字 怪异



我有一个表格,我想按降序date_created排序,但还有一个固定列,如果它是 1,则无论日期如何,该行都应该位于顶部。我想出的查询确实有效,如下所示:

SELECT * FROM my_table 
WHERE id = SOMEID
ORDER BY (CASE WHEN pinned = 1 THEN 3 ELSE date_created END) DESC;

我想知道的是为什么 mysql 认为数字 3 大于 2020 年的所有这些日期。我目前的理论是 mysql 将 3 转换为 3000 年 1 月 1 日的日期,因为如果我使用值 2,那么固定的行不在正确的位置。

那么我的问题是:3 如何大于 2020-06-22 08:59:09,有没有更好的方法来形成这个查询?

额外问题:有没有办法确保固定行也按相对于所有其他固定行的降序date_created排序?与前两个问题相比,这是最佳答案。

本质上你是对的,但原因恰恰相反。这只是一个简单的字符串比较:

SELECT '2020-01-01' > '3';
+--------------------+
| '2020-01-01' > '3' |
+--------------------+
|                  0 |
+--------------------+
1 row in set (0.01 sec)
SELECT '2020-01-01' < '3';
+--------------------+
| '2020-01-01' < '3' |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

作为替代方案,请考虑ORDER BY pinned = 1 DESC, date

最新更新