我想根据两列mod_time和create_time来订购结果。
我希望最近出席。目前我有
ORDER BY pr.mod_time DESC, pr.create_time DESC
如果项目未被修改,则会中断,在这种情况下,mod_time为0且仅设置了create_time。即使create_time大于任何其他mod_time,这也有效地将mod_time为0的任何内容放到排序的末尾。
我希望这是有道理的。
有没有办法可以使用ORDER BY来做到这一点?
谢谢,杰克
答案 0 :(得分:4)
你可以用这个:
ORDER BY CASE WHEN pr.mod_time = 0 THEN pr.create_time
ELSE pr.mod_time
END DESC, pr.create_time DESC
或许这个更简单的版本是你想要的,假设一个项目在创建之前永远不会被修改:
ORDER BY GREATEST(pr.mod_time, pr.create_time) DESC, pr.create_time DESC
请注意,如果有的话,这些查询将无法使用索引。
答案 1 :(得分:2)
我不确定这是不是你的意思,但我会在以下情况下提供:
只需切换你的ORDER BY:
ORDER BY pr.create_time DESC, pr.mod_time DESC
这将导致它首先按create_time排序。
附注:您可以在创建时设置mod_time,以便创建的项目与create_time同时“修改”(创建)。这可能取决于您系统中还有其他功能。
答案 2 :(得分:0)
将IFNULL(pr.create_time, pr.mod_time)
添加为所选列之一。
在IFNULL
中指定ORDER BY
的位置。