logo
当前位置:首 页 > 编程技术 >后端开发 >mysql > 查看文章

说下业务需求:需要将特别的字段的数据提前,然后再按照创建时间倒叙排列

初看需求特别简单,秒秒钟sql就写好了:

 

SELECT
	 *
FROM
	`order`
 
LEFT JOIN `ORDER_ERROR` orer ON `order`.`id` = orer.order_id
 
 
 
ORDER BY
	`orer`.`need_manual_processing` DESC,
	`create_time` DESC

 

运行了之后,完美交收。

跑了些数据,测试说了,你这个不对啊,排序有问题啊,怎么有一个刚创建的订单排到了末位,我就说,不可能的,这个sql这么简单,不可能错的,你再看看。

测试看了几遍,确定是有问题,我看了,确实。然后在数据库跑了脚本,发现确实:

 

 

这么诡异的时间怎么发生的呢?发现这个need_manual_processing为空,

看了下MySQL的文档,发现null比数字的排序靠前。这就麻烦了。没遇到过啊。

 

找了下谷歌然后看了下文档,找到了个:isnull方法,测试了下数据库报错,发现这个是老版本废弃的方法,现在的是ifnull:

 

IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。

IFNULL() 函数语法格式为:

IFNULL(expression, alt_value)

 

修复下sql脚本:

 

SELECT
	 ifnull(orer.need_manual_processing ,0) as need_manual_processing,*
FROM
	`order`
 
LEFT JOIN `ORDER_ERROR` orer ON `order`.`id` = orer.order_id
 
 
ORDER BY
	ifnull(orer.need_manual_processing ,0) DESC,
	`create_time` DESC

 

完美,脚步跑的结果就是下面这个:

 

 

如果需要的话在在filed补全数据,这样数据格式就统一了

 

 

 

说说梦想,谈谈感悟 ,聊聊技术,有啥要说的来github留言吧 https://github.com/cjx2328

—— 陈 建鑫

陈建鑫
你可能也喜欢Related Posts
footer logo
未经许可请勿自行使用、转载、修改、复制、发行、出售、发表或以其它方式利用本网站之内容。站长联系:cjx2328#126.com(修改#为@)
Copyright ©ziao design Studio All Rights Reserved.沪ICP备14052271号-3