问题
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>
以上