MySQL中的条件排序?

ser*_*erg 3 mysql sql sorting

我有3个字段的"任务"表:

  1. 日期
  2. 优先级(0,1,2)
  3. 完成(0,1)

我想要实现的是整个表按完成标记排序,未完成的任务应按优先级排序,而完成的任务应按日期排序:

  1. 通过完成asc从任务顺序中选择*
  2. 如果完成= 0,则按优先级desc排序
  3. 如果完成= 1另外按日期desc排序

没有工会可以在MySQL中执行此操作吗?

谢谢.

Ale*_*lli 13

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

例如:

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


man*_*ock 7

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

SELECT * FROM tab
ORDER BY done ASC, IF(done, to_days(thedate), prio) DESC;
Run Code Online (Sandbox Code Playgroud)