MySQL ORDER BY,使用列 mod_time,但如果 mod_time 为 0,则使用列 create_time

标签 mysql sql-order-by

我想根据 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/

相关文章:

JPA 1.0 @OrderBy 使用字段名称与 JPA 2.0 @OrderColumn 使用列名称

php - MySQL - 如何更改表中行的顺序

sql-order-by - 如何在《教义2》中按数排序?

mysql - 如何编写将逗号分隔字段扩展为多个字段的 SQL 查询?

MySQL 使用正则表达式重新排序字符串?

mysql - tomcat连接mysql失败

MySQL 按数字排序,最后为空

mysql - 在 mysql 中插入时保留双引号和单引号以及转义字符

php - 在 sql 查询中定义 ORDER

mysql - 按下一个最大数字排序