问题背景
在日常工作中,总是会遇到Mysql排序的问题,其实排序的问题本身并不复杂,只是有一些异常的情况需要特殊处理,下面讲述在Mysql排序时遇到排序字段有NULL时的排序处理。
问题处理
场景重现
Mysql对于排序字段为NULL时,有自身默认的排序规则,当你的Mysql语句是升序时
可以看到排序字段为NULL的数据排在上面,这个时候我们想要让排序字段为NULL的排在最后怎么处理呢?
解决方案
对于上面的问题如何处理,我们可以引入一个新的排序字段,比如 t1.sort IS NULL sort2 并且把列表顺序也稍作调整,方便我们观察数据结构
图中我们可以看到,我们引入了sort2字段,用来判断当前t1.sort字段是NULL,当t1.sort为NULL时,sort2为1,反之,sort2为0,然后在排序时先按照sort2升序,结果就是0,1;然后对于sort2排序值相同的,再按照t1.sort升序,结果就是1,2,3,4,5,6,7,10,到这里,我们就解决了Mysql排序字段为NULL时升序放后面的问题。
当然除了上面这个方案,你也可以这样做
就是在排序时对t1.sort进行判断,如果为NULL,则赋予一个当前排序字段不能达到的较大值,也可以达到目的。
问题总结
其实对于这类字段为NULL,但是又需要排序时用到的字段,你都可以通过类似于这种赋值的思想来考虑处理他,不管是你通过t1.sort IS NULL还是通过IFNULL(t1.sort,9999)来处理,基本原理都是给予排序字段的NULL值一个确定的值,有了确定的值,这样在排序时也就容易处理了,这便是解决问题的小思路。