0
点赞
收藏
分享

微信扫一扫

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

彩虹_bd07 2022-02-24 阅读 72

需求背景:
客户要求多种多样,图片展示排序也是个性化突显,现场需要拍十张图片上传取证,但个性客户要求前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>
举报

相关推荐

0 条评论