要求对表数据进行排序,表字段中,有国,省,市,县,镇五个字典,外加一个sort字段。排序规则如下:
国-sort-省-sort-市-sort-县-sort-镇-sort
涉及到一个分组排序问题,然后数据又是一个整体。挺棘手的,想了如下受限的办法排:
select xxx from xxx where xxx order by
case
when nation_id is not null and nation_id!='' then sort+5000000000
when province_id is not null and province_id!='' then sort+4000000000
when city_id is not null and city_id!='' then sort+3000000000
when county_id is not null and county_id!='' then sort+2000000000
when town_id is not null and town_id!='' then sort+1000000000
else 0 end DESC;
原理:
强制将sort分成了国,省,市,县,镇5个区间。然后取区间数值排序即可。勉强满足了业务需求。
最终排序的数字是:
国:5000000000-599999999999
省:4000000000-499999999999
市:3000000000-399999999999
县:2000000000-299999999999
镇:1000000000-199999999999
对结果数据排序,就满足了国-sort-省-sort-市-sort-县-sort-镇-sort的要求。
有如下限制:
sort不能超过1000000000,超过了就跨区间了。这点可以从页面限制填写的序号大小即可。
只能倒序,默认序号为0,空值排到最后面