在我们写业务代码的时候,会经常碰见排序方式既不是正序也不是倒序。
例如:有一个简单的任务task表,表结构如下:
id : 任务ID
start-time:任务开始时间
end_time:任务结束时间
deal_status:任务状态 0 未开始 1 进行中 2 已处理
需求1
按照自定义状态排序:
正序:进行中、未开始、已处理
倒序:已处理、未开始、进行中
发现无论是 asc 还是desc 都无法实现。这时候我们可以使用mysql的field实现。
-- 正序
SELECT * FROM `task` order by field(deal_status,1,0,2)
-- 倒序
SELECT * FROM `task` order by field(deal_status,2,0,1)
需求2
增加延期状态,即实际接口返回状态:0 未开始 1 进行中 2 已处理 3 延期(当前时间>end_time并且未处理的任务)
按照以下状态排序
正序:进行中、未开始、延期、已处理
倒序:已处理、延期、未开始、进行中
这时我们发现使用需求1里面的方式并不能解决问题了,可使用mysql里的case来对原有的状态进行重新赋值,以便于个性化排序
SELECT
id,start_time,end_time