我想根据 mod_time 和 create_time 两列对结果进行排序。
我希望出现最新的。目前我有
ORDER BY pr.mod_time DESC, pr.create_time DESC
如果项目未修改,则此操作会中断,在这种情况下 mod_time 为 0 并且仅设置了 create_time。这实际上将 mod_time 为 0 的任何内容放在排序的末尾,即使 create_time 大于任何其他 mod_time。
我希望这是有道理的。
有没有办法使用 ORDER BY 来做到这一点?
谢谢, jack
最佳答案
你可以使用这个:
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
请注意,这些查询将无法使用索引(如果有)。
关于MySQL ORDER BY,使用列 mod_time,但如果 mod_time 为 0,则使用列 create_time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2924223/