【问题标题】:MySQL Order By Date And Boolean Priority: Number To Date WeirdnessMySQL 按日期排序和布尔优先级:数字到日期的怪异
【发布时间】:2020-06-22 15:56:03
【问题描述】:

我有一个表,我想按 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 相对于所有其他固定行的降序排序?这对于成为最佳答案而言不如前两个问题重要。

【问题讨论】:

    标签: mysql sql database sql-order-by


    【解决方案1】:

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

    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

    【讨论】:

    • 谢谢,这是一个干净的解决方案,你的解释很有道理。
    猜你喜欢
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 2014-02-01
    • 1970-01-01
    相关资源
    最近更新 更多