按照指定规则顺序进行排序 mysql

27 篇文章 1 订阅
15 篇文章 1 订阅

需求背景:
客户要求多种多样,图片展示排序也是个性化突显,现场需要拍十张图片上传取证,但个性客户要求前5张图片要指定5个类型且指定排序,后五张不指定,故设计数据库表的时候,在全局参数配置表中增加一个顺序的参数(下面会贴上图),一是在取证拍照时候,前端根据参数配置的顺序去排版,二是在图片回显时候,也根据这个参数配置的类型数据去回显。
过程:
1.参数配置如图
在这里插入图片描述

2.前端拍照框展示
前端会调取后端公共接口去获取参数配置表数据,根据上面图一中的顺序去展示。
3.前端页面回显
3.1前端页面也许按照参数配置表中的值展示,这时候需要后端去排好序传给前端,前端按照后端给的数据顺序去展示。
3.2.后端排序
按照指定规则排序,在Navicat中,写好SQL语句,测试,看结果,没问题,如下图:
在这里插入图片描述
语法就是:select * from table_name order by field(status,5,1,2,3,4);
接下来就是代码实现,但遇到了一个坑,一开始入参,是从参数配置表中查询出来的(String类型)字段和值,直接和其他查询条件一起入参了,sql语句:order by FIELD(imageTypeNo,#{sort}) asc
结果发现查询出来的列表排序是乱的.
仔细想想,发现不对,这样入参,被解析后是这个结果:

order by FIELD(imageTypeNo,'06,03,02,04,05,01') asc;

而我们需要的是:

order by FIELD(imageTypeNo,06,03,02,04,05,01) asc

也就是没有引号:‘’,
那就是入参不能是String类型的字符串,而应该是List,代码中String转成List:

StringBuffer s1 = new StringBuffer(sortCode);
                String[] sort = s1.split(",");
                sortList = Arrays.asList(sort);

入参后的SQL排序语句:

<if test="sortList != null and sortList.size() != 0">
            order by  FIELD(t2.ATTACH_TYPE,
            <foreach item="item" index="index" collection="sortList" separator=",">
                #{item}
            </foreach>) asc
        </if>

这个SQL语句也是要注意一点,我一开始按照下面这样格式写了,也不行,需要去掉:open="(“和close=”)",才可以。

<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
      #{item}
    </foreach>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL排序规则是指在查询、筛选、比较字符类型的数据时,用来决定数据的顺序和比较的规则。它会影响到使用ORDER BY语句查询的结果顺序,WHERE条件中大于小于号的筛选结果,DISTINCT、GROUP BY、HAVING语句的查询结果,以及索引的创建等。排序规则可以在创建数据库或表时指定,也可以在查询语句中临时指定。在使用Navicat for MySQLMySQL Workbench创建数据库时,除了字符集,还可以设置排序规则(也可以使用默认的排序规则)。不同的排序规则使用不同的算法来比较字符,所以会影响到字符类型的比较结果和排序顺序。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MySQL 排序规则](https://blog.csdn.net/wan212000/article/details/124706692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MySql 排序规则](https://blog.csdn.net/LINgZone2/article/details/129712348)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值