在工作中经常会遇到如下场景,客户提出需求,我需要某一个列表中的数据按照指定的顺序排序,而之前并没有告诉你要排序。场景如下:
有数据表RecordData,包括三个字段,ID/Description/Catalog,现客户指定要以Descripton排序,排序规则按照D1/D2/D3排序显示。
一种比较直接的方法是:首先读取所有的T1记录,存储在ArrayList中,然后通过指定的顺序去遍历D1/D2/D3,先将包含D1的挑选出存储在另一个ArrayList中,循环所有的记录即可。
但是这样做有一个问题,如果记录非常多,排序规则也有很多,那么就要循环多次,效率会很低下。另一种办法如下:
新建数据表SortRule,
Id | Description |
1 | D1 |
2 | D2 |
3 | D3 |
则可以直接构造SQL语句实现需求
SELECT T1.ID,T1.Description,T1.Catalog
FROM RecordData T1
LEFT JOIN SortRule T2 ON T1.Description=T2.Description
ORDER BY T2.Id ASC
很简单的实现了需求,而且比直接算法更好的在于可动态定义排序规则。