Mysql 排序orderBy if 使用方法及排序规则

22. May 2018 DataBase 0

开发中遇到的排序问题中,有字段为0或null,需要后置处理,网上部分博客感觉有点问题,多次实践,总结如下:

使用的字段id,自增,usnews_n_sort参照,rank进行排序,有0和null

 

排序过程中判断rank是否为0或为null,若是,则在rank上添加隐藏字段,为“1”添加在查询结果尾部,为“0”添加在查询结果首部

情景一:不使用 if 排序

SELECT id,usnews_n_sort,rank from test ORDER BY rank ASC

使用rank 升序,null 在0之前。

 

情景二:使用 if  后置 升序

SELECT id,usnews_n_sort,rank from test ORDER BY IF(rank=0 || ISNULL(rank),1,0), rank ASC

把为0或为null的情况后置,然后进行升序处理

 

情景三:使用if 后置 降序

SELECT id,usnews_n_sort,rank from test ORDER BY IF(rank=0 || ISNULL(rank),1,0), rank DESC

把为0或为null的情况后置,然后进行降序处理

 

情景四:使用if 前置 升序

SELECT id,usnews_n_sort,rank from test ORDER BY IF(rank=0 || ISNULL(rank),0,1), rank ASC

把为0或为null的记录前置,然后升序

 

情景五:使用if前置降序

SELECT id,usnews_n_sort,rank from test ORDER BY IF(rank=0 || ISNULL(rank),0,1), rank DESC

把为0或为null的记录前置,然后降序

 

最后默认根据id字段升序输出结果。