MySQL之FIND_IN_SET()的用法及說(shuō)明
一、語(yǔ)法
FIND_IN_SET(str,strlist)
str:要查詢的字符串strList:一個(gè)被,號(hào)分隔開(kāi)的字符串- 函數(shù)是返回strList中str所在的位置索引
二、用法
SELECT FIND_IN_SET(‘e’, ‘a,b,c,d’);結(jié)果是0SELECT FIND_IN_SET(‘b’, ‘a,b,c,d’);結(jié)果是2:因?yàn)閎在strlist集合中放在2的位置,從1開(kāi)始SELECT FIND_IN_SET(‘c’, ‘a,b,c,d’);結(jié)果是3
和in、like的區(qū)別
find_in_set(str,strlist)函數(shù)是用變量,strlist內(nèi)容是逗號(hào)分隔的字符串
in后面是要常量,表示一個(gè)個(gè)羅列,in(‘11’,‘12’,‘13’)like是模糊匹配,find_in_set是精確匹配
三、用途
舉個(gè)例子一
當(dāng)數(shù)據(jù)庫(kù)表中,存在有逗號(hào)拼接的字符串的字段時(shí),查詢時(shí)候用FIND_IN_SET函數(shù)。
# 創(chuàng)建表
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使用';
# 新增數(shù)據(jù)
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的記錄

舉個(gè)例子二
一張部門(mén)表中,有個(gè)userIds字段,存放的是關(guān)聯(lián)的部門(mén)下用戶的id;比如:‘111,112,113’。
然后需要查詢返回的結(jié)果是,Dept對(duì)象中帶有user的對(duì)象數(shù)組。
CREATE TABLE IF NOT EXISTS dept(
`id` INT(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL COMMENT '部門(mén)名字',
`user_ids` text DEFAULT NULL COMMENT '部門(mén)人員',
PRIMARY KEY (`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '部門(mén)表';
<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" /> // 在實(shí)體類中有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>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MySQL的FIND_IN_SET函數(shù)使用方法分享
- Mysql中的find_in_set的使用方法介紹
- Mysql中FIND_IN_SET()和IN區(qū)別簡(jiǎn)析
- mysql通過(guò)find_in_set()函數(shù)實(shí)現(xiàn)where in()順序排序
- MySQL中find_in_set()函數(shù)用法示例詳解
- Mysql中find_in_set()函數(shù)用法詳解以及使用場(chǎng)景
- mysql查詢FIND_IN_SET?REGEXP實(shí)踐示例
- MySQL中的FIND_IN_SET函數(shù)的使用場(chǎng)景
- mysql中find_in_set()函數(shù)用法及自定義增強(qiáng)函數(shù)詳解
- Mysql中FIND_IN_SET函數(shù)的使用及問(wèn)題
- MySQL FIND_IN_SET函數(shù)的使用場(chǎng)景
相關(guān)文章
mysql啟動(dòng)錯(cuò)誤之mysql啟動(dòng)報(bào)1067錯(cuò)誤解決方法
MYSQL啟動(dòng)報(bào)1067錯(cuò)誤,系統(tǒng)日志中是“服務(wù) mysql 意外停止” Mysql日志中則是:Plugin 'FEDERATED' is disabled,下面給出解決方法2014-02-02
MySQL insert 記錄后查詢亂碼問(wèn)題解決方法
文章通過(guò)分析一個(gè)MySQL插入數(shù)據(jù)后查詢亂碼的問(wèn)題,探討了亂碼的原因,并提出了解決方法,問(wèn)題的根本原因是MySQL客戶端和服務(wù)器之間的字符集不一致,導(dǎo)致插入的中文字符被錯(cuò)誤解碼為亂碼,感興趣的朋友跟隨小編一起看看吧2024-11-11
MySQL優(yōu)化必須調(diào)整的10項(xiàng)配置
這篇文章主要介紹了MySQL優(yōu)化必須調(diào)整的10項(xiàng)配置,使用這些方法可以讓你快速地獲得一個(gè)穩(wěn)健的MySQL配置,需要的朋友可以參考下2014-02-02
教你使用MySQL Shell連接數(shù)據(jù)庫(kù)的方法
在有些情況下我們需要使用命令行方式連接MySQL數(shù)據(jù)庫(kù),這時(shí)可以使用MySQL官方提供的命令行工具M(jìn)ySQL Shell,今天通過(guò)本文給大家介紹下mysql Shell連接數(shù)據(jù)庫(kù)的方法,感興趣的朋友一起看看吧2022-04-04
詳解MySQL中concat函數(shù)的用法(連接字符串)
本篇文章主要介紹了MySQL中concat函數(shù)的用法(連接字符串),在命令行模式下進(jìn)行測(cè)試。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-12-12
MySQL數(shù)據(jù)庫(kù)中Interval關(guān)鍵字的使用看這一篇就夠了

