MySQL按条件秒排序

MySQL按条件秒排序,mysql,Mysql,从表事件中选择,包括列开始日期和进行中(布尔值),我想: 按正在进行的对结果进行排序第一次(所有0在1之前) 然后我想按开始日期ASC对所有非正在进行的事件(正在进行的=0)进行子排序,并按开始日期描述对所有正在进行的事件(正在进行的=1)进行子排序。我可能错过了一些愚蠢的简单的东西(可能使用CASE?),但我被卡住了 TIA只需使用TIMESTAMPDIFF()计算即可: 请注意,在这两种情况下,参数的顺序是如何颠倒的。(我可能会让他们自己倒过来-如果是这样,就在每次调用中交换。)您必须使用计

从表
事件
中选择,包括列
开始日期
进行中
(布尔值),我想:

  • 正在进行的
    对结果进行排序第一次(所有0在1之前)
  • 然后我想按
    开始日期ASC
    对所有非正在进行的事件(
    正在进行的=0
    )进行子排序,并按
    开始日期描述对所有正在进行的事件(
    正在进行的=1
    )进行子排序。我可能错过了一些愚蠢的简单的东西(可能使用
    CASE
    ?),但我被卡住了
    TIA

    只需使用
    TIMESTAMPDIFF()计算即可:


    请注意,在这两种情况下,参数的顺序是如何颠倒的。(我可能会让他们自己倒过来-如果是这样,就在每次调用中交换。)

    您必须使用计算值(并分别为
    0
    1
    生成不同的值,以创建一个有序的值)。我怀疑这比只运行两个单独的查询要慢。请提供数据样本和预期结果好吗?sqlfiddle将非常有帮助地向我们展示您到目前为止的成果。谢谢!我试图弄清楚如何将
    ASC
    DESC
    放在条件中。出于我的目的,我将函数更改为
    DATEDIFF
    (使用
    DATE
    数据类型),但这成功了!
    SELECT ...
    FROM ...
    ...
    ORDER BY ongoing, IF(ongoing, TIMESTAMPDIFF(NOW(), start_date), 
                                  TIMESTAMPDIFF(start_date, NOW()))