• 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。

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

  • 相关阅读:
    柏林自由大学研究团队《Ecology Letters 》揭示AMF在植物对全球变化响应的作用
    SpringCloud-OAuth2(一):基础篇
    [网络安全提高篇] 一一六.恶意代码同源分析及BinDiff软件基础用法
    03【解构赋值】
    [附源码]java毕业设计校园快递管理系统
    【编解码格式】Dirac、VC-2、VC-1、WMV3(WMV9)
    LrC 13 & ACR 16:镜头模糊
    Connor学Android - RemoteViews
    智能电网中需求响应研究(Matlab代码实现)
    千帆SDK开源到GitHub,开发者可免费下载使用!
  • 原文地址:https://blog.csdn.net/weixin_48207312/article/details/127107951