MySQL中的条件排序?

时间:2009-07-05 16:26:43

标签: sql mysql sorting

我有3个字段的“任务”表:

  1. 日期
  2. priority(0,1,2)
  3. 完成(0,1)
  4. 我想要实现的是整个表按完成标记排序,未完成的任务应按优先级排序,而完成的任务应按日期排序:

    1. 通过完成asc
    2. 从任务订单中选择*
    3. 如果完成= 0,则按优先级desc排序
    4. 如果已完成= 1另外按日期排序desc
    5. 在没有工会的情况下,是否可以在MySQL中执行此操作?

      感谢。

2 个答案:

答案 0 :(得分:12)

您可以尝试ORDER BY (done asc, aux desc)使用CASE计算辅助,以根据done的值生成优先级或日期(您可能必须将它们转换为相同的类型适合相同的表达式,例如将日期转换为合适的整数天数。)

例如:

SELECT * FROM tab
ORDER BY done desc,
         case done
             when 0 then prio 
             else to_days(thedate)
         end desc;

答案 1 :(得分:7)

取自Alex Martelli,用IF()缩短了一点,并修正了ASC / DESC的排序

SELECT * FROM tab
ORDER BY done ASC, IF(done, to_days(thedate), prio) DESC;