我有3个字段的“任务”表:
我想要实现的是整个表按完成标记排序,未完成的任务应按优先级排序,而完成的任务应按日期排序:
在没有工会的情况下,是否可以在MySQL中执行此操作?
感谢。
答案 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;