当前位置:   article > 正文

mysql查询某字段中以逗号分隔的字符串 1,12,3 找到包含1的元素不会找到 12_mysql求1,2,3包含1,2,3中任何一个

mysql求1,2,3包含1,2,3中任何一个

方法一:
1、mysql查询

SELECT
  user_name,
  user_type
FROM
	user
WHERE
find_in_set('1', user_type)
OR find_in_set('2', user_type)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、程序里mybatis可以这样写
传参:List 类型 userTypeList:[1,2]

<select id="" parameterType="" resultMap="">
    SELECT user_name,user_type 
    FROM user 
  	<where>
  	  1=1 
      <if test="userTypeList != null and userTypeList.size() >0">
        <foreach collection="userTypeList" open="and (" close=")"  item="id" separator="or">
            <if test="id != null and id != '' ">
                find_in_set(#{id}, user_type)
            </if>
        </foreach>
      </if>
  	</where>
</select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

方法二:
1、mysql查询

SELECT
    user_name,
	user_type
FROM
	user 
WHERE 1=1
AND CONCAT(',', user_type, ',') REGEXP '(,2,)|(,1,)'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(,2,)作为一个整体查询,这样处理是因为REGEXP不能根据逗号 分隔筛选,会查出来所有带2的角色,如:21

2、程序里写法
传参:String类型 userType: “1,2”

<select id="" parameterType="" resultMap="">
    SELECT user_name,user_type 
    FROM user 
  	<where>
  	  1=1 
      <if test="userType != null and userType != '' ">
      AND CONCAT(',', user_type, ',') REGEXP (CONCAT('(,', REPLACE(#{userType},',',',)|(,'), ',)'))
      </if>
  	</where>
</select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/230937
推荐阅读
相关标签
  

闽ICP备14008679号