今天项目开发时,遇到一个对于后端来说比较变态的需求,而这个需求指派给前端做的话,也无法很好的实现,所以我研究了一下mysql的复杂排序,果然,发现了新大陆。
背景需求
1.现有一批需要审批的数据,审批状态码如下:
审核状态码:1.待审批;2.部门通过;3.部门驳回;4.管理员通过;5.管理员驳回;6.升级审批;7.升级通过;8.升级失败;9.已下架
2.需要对这些数据进行如下排序:
① 待审批(1)和升级审批(6)的数据需要优先,并且进行创建时间倒序;
② 其他数据放到后面,进行创建时间倒序;
实现方法
废话不多说,直接上排序的sql
ORDER BY CASE WHEN statusCode IN (1,6) THEN 1 ELSE 2 END,createTime DESC
排序规则说明一下:
1.case when里有in关键字,说明如果出现statusCode=1或者=6时,把这些数据放到第一顺位;
2.其他的状态码放到第二顺位;
3.并且按照createTime逆序