Mysql查询——根据字段值自定义排序


前言

在开发中会遇到一些奇葩的不常见的业务,需要对某些字段进行非规则性排序,举个简单的例子,比如原本1,2,3三个数,要让你按2,1,3去进行排序,针对这样的需求也有对应的解决办法,使用FIELD(value, val1, val2, val3, ...)函数来实现这一功能,下面是根据字段值自定义排序的具体实现,以及FIELD函数的使用

实现字段值自定义排序

实现的功能:为3的排在第一位,其余字段值按默认的排序规则进行正序排序

select DISTINCT monitor_limits from sys_user order by monitor_limits
原版执行结果:
null
0
1
2
3
4
5
6
7

下面是使用了FIELD函数进行自定义排序规则,我要把值为3的放在第一位

select DISTINCT monitor_limits from sys_user order by FIELD(monitor_limits,"3")
执行结果:
0
1
2
4
5
6
7
null
3

--可以看出为3的并没有出现在第一位,而是先根据默认排序规则排序,然后再把自定义排序的放在最后面
-- 解决办法:只要在sql后面加上 desc

select DISTINCT monitor_limits from sys_user order by FIELD(monitor_limits,"3") desc
执行结果:
3
0
1
2
4
5
6
7
null

结论:可以看出如果想要特定的字段出现在首位需要加上desc来实现,FIELD默认把特定值的数据放在最后面,当然这个函数也可以实现多个参数的自定义排序规则,和汉字的自定义排序

-- 进阶查询
select DISTINCT monitor_limits from sys_user order by FIELD(monitor_limits,"3",'5','2')
执行结果:
0
1
4
6
7
null
3
5
2

-- 进阶查询倒叙查询
select DISTINCT monitor_limits from sys_user order by FIELD(monitor_limits,"3",'5','2') desc
2
5
3
0
1
4
6
7
null

FIELD()函数

field(value,str1,str2,str3,str4)
字段str按照字符串str1,str2,str3,str4的顺序返回查询到的结果集。如果表中str字段值不存在str1,str2,str3,str4中的记录,则按默认排序规则排序,如果有,就会把指定定的数据排在结果集最后面

特征:

  • value:要搜索的指定值。
  • val1,val2,val3,…:指定要搜索的值列表
  • 此函数用于在指定值列表中查找给定值的索引位置。
  • 该函数接受两种类型的参数。
  • 第一个参数是要搜索的指定值,第二个参数是要搜索的指定值列表。
  • 此函数执行不区分大小写的搜索。
  • 如果给定值的指定列表中不存在该给定值,则此函数返回0。

仰天大笑出门去,我辈岂是蓬蒿人

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT行业小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值