mysql order by 指定值_MySQL中 order by 自定义值排序

MySQL中 order by 自定义值排序

bc7fdfc03a181785f939cc7c3cabcadc.gif

1、问题

万事皆有因,先说问题。

数据库表中有一个 status 字段(请忽略规范命名),表示各个状态值,如下`status` tinyint(4) NOT NULL COMMENT '状态: 1 生成中, 10 生效, 20 完成, -10 失效, -20 停用'

在查询列表时,要求:根据状态排序,生成中-》生效-》完成-》失效-》停用 的顺序去执行。

而我们常见的排序语法为:order by status asc 或者 order by status desc ,这种方式会自然顺序排序,得不到我们预期的效果。

那该怎么办呢?

2、方案

MySQL 中的排序 order by 除了可以用 asc 和 desc,还可以自定义字符串/数字来实现排序。

方法一:field( field1,val1,val2,…)

修改SQL如下:select * from call_package order by field(`status`,1,10,20,-10,-20) asc // 默认asc

这样子写的话,返回的结果集是按照字段status的1、10、20、-10、-20 进行排序的,当然,也可以对字符串进行排序。select orderNumber, status from orders order by field(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');

原理:FIELD() 函数是将参数1的字段对后续参数进行比较,并返回1、2、3等等,如果遇到null或者没有在结果集上存在的数据,则返回0,然后根据升序进行排序。

法二:case when … then … when … then … else … end

修改SQL如下:select * from call_package order by case when `status`=1 then 1 when `status`=10 then 2 when `status`=20 then 3 when `status`=-10 then 4 when `status`=-20 then 5 else 0 end

3、参考

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值