mysql - 按 `updated_at` 和 `created_at` 排序,即使它们为 NULL

标签 mysql sql sql-order-by

我有下表:

CREATE TABLE `entries` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `created_at` datetime DEFAULT NULL,
  `updated_at` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

我想按 updated_atcreated_at 对条目进行排序。

但是它们中的任何一个都可以是NULL

我的查询:

SELECT *
FROM `entries`
ORDER BY `updated_at` DESC, `created_at` DESC, `id` DESC

但这会将所有未更新的条目放在结果的底部。

基本上我需要它们按可用的最后日期排序。如果没有可按 id 排序。

最佳答案

我相信你想要的是:

ORDER BY coalesce(updated_at, created_at) DESC, id DESC

这按更新日期(如果可用)或创建日期(如果不可用)排序。然后它按 id 降序排序。

关于mysql - 按 `updated_at` 和 `created_at` 排序,即使它们为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15501293/

相关文章:

php - 基于角色的登录

sql - 将 nvarchar 值转换为数据类型 int 时转换失败

java - 识别和非识别关系

java - 长时间不活动后tomcat没有响应

c#提交到数据库时从字符串中剥离字符

php - 为什么使用 MySQL 连接进行 DNS 查找需要这么长时间?

php - 如何将文件图像存储到 mysql (Codeigniter)

MySQL 按匹配数排序

sql - ORDER BY 查询中的 IFELSE 语句

MYSQL - 按从最新到最旧的顺序升序排列时间戳值?