find_in_set 中参数都为多个的情况处理

问题

FIND_IN_SET('a','a,b,c') 可以很方便的查询 ',' 分隔的数据的情况,但如果 是 FIND_IN_SET('a,c','a,b,c') 的情况那么就查不出来了。需要做一点优化

实际情况

优化方案

方案一

在外面将 查询条件转为 正则表达式,然后再查询

SELECT * FROM `design_modelview` WHERE CONCAT(',', majorId, ',') REGEXP ',(a|c),';

方案二

<foreach collection="majorIds.split(',')" item="majorId" index="index" open="" close="" separator="OR">
  FIND_IN_SET(#{majorId},majorId)
</foreach>

修改后

    <!--视点列表-->
    <select id="getViewPointlist" resultType="map">
        select id,name,`position`,target
        from design_modelview
        where find_in_set(groupId,#{moduleGroupIds})
#         and find_in_set(majorId,#{majorIds})
        and
            <foreach collection="majorIds.split(',')" item="majorId" index="index" open="(" close=")" separator="OR">
                FIND_IN_SET(#{majorId},majorId)
            </foreach>
        and isAvailable = 1
    </select>

以上

相关文章

转载请注明: 转载自 浮生一程
本文链接地址 find_in_set 中参数都为多个的情况处理
上一篇
下一篇