如何在mysql中对创建和更新日期进行排序

如何在mysql中对创建和更新日期进行排序,mysql,sql,Mysql,Sql,在我的数据库中,有这样一个表 student ======= name create_date timestamp current_timestamp update_date timestamp null 更新日期默认为空,只有在有更新时,更新日期才会设置时间戳 问题是,我想按日期排序记录,如果有更新日期,我想使用更新日期,如果更新日期为空,则使用创建日期 如何将查询从简单更改为 Select name from student order_by create_date desc 来完成我

在我的数据库中,有这样一个表

student
=======
name
create_date timestamp current_timestamp
update_date timestamp null
更新日期默认为空,只有在有更新时,更新日期才会设置时间戳

问题是,我想按日期排序记录,如果有更新日期,我想使用更新日期,如果更新日期为空,则使用创建日期

如何将查询从简单更改为

Select name from student order_by create_date desc 
来完成我的案子


非常感谢

您可以使用表达式返回指定的值

ANSI标准表达式是

CASE WHEN update_date IS NOT NULL THEN update_date ELSE create_date END
在MySQL中,我们有几个函数可以返回相同的结果:

IF(update_date IS NOT NULL, update_date, create_date) 

使用类似ORDER BY子句中的表达式

ORDER BY IFNULL(update_date,create_date) DESC

另一方面,我建议将update_date设置为首次创建_date,并在每次更新时对其进行更新。您以前是否使用过codeigniter,$this->db->order_by('ifnull(update_date,create_date)','DESC');导致sql错误,您知道如何转义字段名吗?感谢CodeIgniter,我认为您可以传递自定义字符串,但我认为
DESC
关键字是字符串的一部分,而不是单独的参数。Try:
->order_by('IFNULL(update_date,create_date)DESC')
COALESCE(update_date,create_date)
ORDER BY IFNULL(update_date,create_date) DESC