在我们处理实际应用场景的时候经常会遇到按某个字段的需求,通常我们使用order by xxx字段 desc进行降序排序可以处理很多场景。
但是在工作中我遇到这么个场景,我新增了一条数据,但是real_online_time在新建的时候是空的,需要后期填写,而在展示列表中要求根据real_online_time排序。如果直接使用order by real_online_time desc,我们新建的那条数据就会排到最后(因为新建数据该字段值为null)。
在oracle中可以使用order by real_online_time desc nulls first解决,但是mysql却没有这个函数,在mysql中可以使用ORDER BY IF( ISNULL( real_online_time ), 0, 1 ),real_online_time DESC 解决
完整代码:
SELECT
id,real_online_time
FROM
apollo_deploy_version_log
WHERE
is_deleted = 'n'
ORDER BY
IF( ISNULL( real_online_time ), 0, 1 ),
real_online_time DESC
效果如下: