mysql排序之if(isnull(字段名),0,1),fild或者if(isnull(字。。。
最近在使⽤mysql排序的时候,⽐如按照sort排序,于是 : select filds from table order by sort asc
但null排在前⾯。
看到同事是这样处理的:IF(ISNULL(sort1),1,0), sort1。
默认情况下,mysql将null算作最⼩值。如果想要⼿动指定null的顺序,可以这样处理:
1. 将null强制放在最前(默认就是这样)
SELECT*FROM BGM_LIST ORDER BY if(isnull(SORT),0,1),SORT ASC//null, null, 1,2,3,4
2. 将null强制放在最后
SELECT*FROM BGM_LIST ORDER BY if(isnull(SORT),1,0),SORT ASC//1,2,3,4,null,null
SELECT*FROM BGM_LIST ORDER BY if(isnull(SORT),1,0),SORT DESC// 4,3,2,1,null,null
3. 解释
mysql下载下来是一个文件夹以if(isnull(字段名),0,1),fild为例,它的意思是将该字段根据是否为null值分成两部分,值为null⾏相当于得到了⼀个隐含的排序属性0,值为⾮null的⾏相当于得到了⼀个隐含的排序属性1,在排序的时候,先根据这⼀隐含属性进⾏升序排列,因为if(isnull(字段名),0,1),fild相当
于if(isnull(字段名),0,1),fild asc省略了asc⽽已,所以⾃然地,排序字段为null的那些⾏(隐含排序属性)会在最前。if(isnull(字段名),1,0)反之。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论