Mysql 排序orderBy if 使用方法及排序规则
开发中遇到的排序问题中,有字段为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字段升序输出结果。