按 `updated_at` 和 `created_at` 排序,即使它们是 NULL

Har*_*rev 2 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;
Run Code Online (Sandbox Code Playgroud)

我想按updated_at和对条目进行排序created_at

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

我的查询:

SELECT *
FROM `entries`
ORDER BY `updated_at` DESC, `created_at` DESC, `id` DESC
Run Code Online (Sandbox Code Playgroud)

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

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

Gor*_*off 5

我相信你想要的是:

ORDER BY coalesce(updated_at, created_at) DESC, id DESC
Run Code Online (Sandbox Code Playgroud)

此命令按更新日期(如果可用)或创建日期(如果不可用)进行排序。然后按 id 降序排序。