MySQL之FIND_IN_SET()的用法及说明

吾爱主题 阅读:170 2023-05-31 14:56:00 评论:0

一、语法

?
1 FIND_IN_SET(str,strlist)
  • str:要查询的字符串
  • strList:一个被,号分隔开的字符串
  • 函数是返回strList中str所在的位置索引

 

二、用法

  • SELECT FIND_IN_SET(‘e’, ‘a,b,c,d’); 结果是0
  • SELECT FIND_IN_SET(‘b’, ‘a,b,c,d’); 结果是2:因为b在strlist集合中放在2的位置,从1开始
  • SELECT FIND_IN_SET(‘c’, ‘a,b,c,d’); 结果是3

和in、like的区别

find_in_set(str,strlist)函数是用变量,strlist内容是逗号分隔的字符串

  • in后面是要常量,表示一个个罗列,in(‘11’,‘12’,‘13’)
  • like是模糊匹配,find_in_set是精确匹配

 

三、用途

 

举个例子一

当数据库表中,存在有逗号拼接的字符串的字段时,查询时候用FIND_IN_SET函数。

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 创建表 CREATE TABLE IF NOT EXISTS tb_test1(      `id` INT (11) NOT NULL auto_increment,      ` name ` varchar (255) NOT NULL COMMENT '名字' ,      `type` varchar (255) NOT NULL COMMENT '类型: 1表示金卡;2表示银卡;3表示铜卡' ,      PRIMARY KEY  (`id`) )ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = 'FIND_IN_SET使用' ;   # 新增数据 INSERT INTO tb_test1( name ,type) VALUES ( 'edg' , '1,2,3' ); INSERT INTO tb_test1( name ,type) VALUES ( 'rng' , '2,3' ); INSERT INTO tb_test1( name ,type) VALUES ( 'ig' , '1,3' );   # 查询 SELECT * FROM tb_test1 WHERE FIND_IN_SET( '1' ,type); # 返回type中包含1的记录

 

举个例子二

一张部门表中,有个userIds字段,存放的是关联的部门下用户的id;比如:‘111,112,113’。

然后需要查询返回的结果是,Dept对象中带有user的对象数组。

?
1 2 3 4 5 6 CREATE TABLE IF NOT EXISTS dept(      `id` INT (11) NOT NULL auto_increment,      ` name ` varchar (255) NOT NULL COMMENT '部门名字' ,      `user_ids` text DEFAULT NULL COMMENT '部门人员' ,       PRIMARY KEY  (`id`) )ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '部门表' ;
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <resultMap id= "ResultMap" type= "com.test.entity.dept" >       <id column = "id" property= "id" jdbcType= "INTEGER" />       <result column = "name" property= "name" jdbcType= "VARCHAR" />       <result column = "user_ids" property= "userIds" jdbcType= "VARCHAR" />       <association property= "Users" resultMap= "Usesr_map" /> // 在实体类中有List< User > Users </resultMap>   <sql id= "User_Column_List" >      user .id user_id, user . name user_name </sql>      <resultMap id= "Usesr_map" type= "com.test.entity.User" >      <id column = "user_id" property= "id" jdbcType= "INTEGER" />      <result column = "user_name" property= "name" jdbcType= "VARCHAR" /> </resultMap>     <! -- 只返回user_ids中包含的id的user记录 --> < select id= "selectOne" resultMap= "ResultMap" parameterType= "INTEGER" >      SELECT      e.id id,e. name name ,e.user_ids user_ids,      <include refid= "User_Column_List" />      FROM dept e      LEFT JOIN User user ON FIND_IN_SET( user .id,e.user_ids)      WHERE e.id = #{e.id} </ select >

 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_43575201/article/details/121412401

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容