今天有个同事接了个需求,产品经理要求要用她指定的顺序查看一些公司及其子公司的业绩情况。
根据她天花乱坠的需求的文档,整理出了以下的简单的抽象模型:
需求描述
aCompany、bCompany、cCompany代表公司的名称,0XsubCompany代表子公司的名称,一个公司包含一个或多个子公司。产品经理想看到页面上按照b、c、a的顺序看这些公司的财务情况。
SELECT * FROM test.rankTable;
开发设计
最开始啥都不去百度,上来直接想给这些abc的company刷个数加个一二三之类的前缀,冷静下来一想,刷数可以,但没必要。 经了解:
MySQL中的field()函数,可用来对SQL中查询结果集进行自定义排序。
结果就通过sql直接简化了开发,最终sql如下:
select * from test.rankTable order by field(
rank_no ,
'bCompany',
'cCompany',
'aCompany'
) ,rank_detail DESC ;
这样,最终的结果集就能按照我们指定的字段顺序进行排序了。
结论汇总
field函数语法:
select * from table_name order by
field(col_name1 ,'value1','value2','value3',......) , col_name2 [ASC/DESC]...... ;
如果是oracle数据库,可以用库中自带的decode函数进行自定义排序,相关用法这里不做介绍了。
留此短文,以作笔记。