MySQL自定义排序

在MySQL中处理自定义排序需求,如任务状态的非正序非倒序排序,可以利用FIELD或CASE语句实现。当需求变得更为复杂,如需要结合多个条件排序,如任务的开始时间、结束时间和状态,可以通过增设sort字段并动态计算权重来实现高效排序。对于延期任务,可设置定时任务更新其权重,确保排序正确。
摘要由CSDN通过智能技术生成

在我们写业务代码的时候,会经常碰见排序方式既不是正序也不是倒序。

例如:有一个简单的任务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
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值