久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

find

141次閱讀
沒有評論

共計 2780 個字符,預計需要花費 7 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這期內容當中丸趣 TV 小編將會給大家?guī)碛嘘P find_in_set()函數(shù)怎么在 mysql 中使用,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

MySQL 手冊中 find_in_set 函數(shù)的語法:

FIND_IN_SET(str,strlist)

str 要查詢的字符串

strlist 字段名 參數(shù)以”,”分隔 如 (1,2,6,8)

查詢字段 (strlist) 中包含 (str) 的結果,返回結果為 null 或記錄

假如字符串 str 在由 N 個子鏈組成的字符串列表 strlist 中,則返回值的范圍在 1 到 N 之間。一個字符串列表就是一個由一些被‘, 符號分開的子鏈組成的字符串。如果第一個參數(shù)是一個常數(shù)字符串,而第二個是 type SET 列,則 FIND_IN_SET() 函數(shù)被優(yōu)化,使用比特計算。如果 str 不在 strlist 或 strlist 為空字符串,則返回值為 0。如任意一個參數(shù)為 NULL,則返回值為 NULL。這個函數(shù)在第一個參數(shù)包含一個逗號 (‘,) 時將無法正常運行。

——————————————————–

  例子:

mysql  SELECT FIND_IN_SET( b ,  a,b,c,d  
-  2  因為 b   在 strlist 集合中放在 2 的位置   從 1 開始
select FIND_IN_SET( 1 ,  1   返回   就是 1   這時候的 strlist 集合有點特殊   只有一個字符串   其實就是要求前一個字符串   一定要在后一個字符串集合中才返回大于 0 的數(shù)  
select FIND_IN_SET( 2 ,  1,2   返回 2  
select FIND_IN_SET(6 ,  1   返回 0 

——————————————————–

注意:

select * from treenodes where FIND_IN_SET(id,  1,2,3,4,5

使用 find_in_set 函數(shù)一次返回多條記錄 id 是一個表的字段,然后每條記錄分別是 id 等于 1,2,3,4,5 的時候 有點類似 in(集合)

select * from treenodes where id in (1,2,3,4,5);

——————————————————–

find_in_set()和 in 的區(qū)別:

弄個測試表來說明兩者的區(qū)別

CREATE TABLE `tb_test` ( `id` int(8) NOT NULL auto_increment,
 `name` varchar(255) NOT NULL,
 `list` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)
INSERT INTO `tb_test` VALUES (1,  name ,  daodao,xiaohu,xiaoqin 
INSERT INTO `tb_test` VALUES (2,  name2 ,  xiaohu,daodao,xiaoqin 
INSERT INTO `tb_test` VALUES (3,  name3 ,  xiaoqin,daodao,xiaohu

原來以為 mysql 可以進行這樣的查詢:

SELECT id,name,list from tb_test WHERE  daodao  IN(list); -- (一)

find_in_set()函數(shù)怎么在 mysql 中使用

實際上這樣是不行的,這樣只有當 list 字段的值等于 daodao 時(和 IN 前面的字符串完全匹配),查詢才有效,否則都得不到結果,即使 daodao 真的在 list 中。

再來看看這個:

SELECT id,name,list from tb_test WHERE  daodao  IN (libk ,  zyfon ,  daodao  -- (二)

find_in_set()函數(shù)怎么在 mysql 中使用

這樣是可以的。

這兩條到底有什么區(qū)別呢?為什么第一條不能取得正確的結果,而第二條卻能取得結果。原因其實是(一)中 (list) list 是變量,而(二)中 (libk , zyfon , daodao)是常量。

所以如果要讓(一)能正確工作,需要用 find_in_set():

SELECT id,name,list from tb_test WHERE FIND_IN_SET(daodao ,list); -- (一)的改進版

find_in_set()函數(shù)怎么在 mysql 中使用

總結:

所以如果 list 是常量,則可以直接用 IN,否則要用 find_in_set()函數(shù)。

——————————————————–

find_in_set()和 like 的區(qū)別:

在 mysql 中,有時我們在做數(shù)據(jù)庫查詢時,需要得到某字段中包含某個值的記錄,但是它也不是用 like 能解決的,使用 like 可能查到我們不想要的記錄,它比 like 更精準,這時候 mysql 的 FIND_IN_SET 函數(shù)就派上用場了,下面來看一個例子。

創(chuàng)建表并插入語句:

CREATE TABLE users( id int(6) NOT NULL AUTO_INCREMENT,
 name VARCHAR(20) NOT NULL,
 limits VARCHAR(50) NOT NULL, --  權限
 PRIMARY KEY (id)
INSERT INTO users(name, limits) VALUES( 小張 , 1,2,12  
INSERT INTO users(name, limits) VALUES(小王 , 11,22,32

  其中 limits 表示用戶所擁有的權限(以逗號分隔),現(xiàn)在想查詢擁有權限編號為 2 的用戶,如果用 like 關鍵字的話,則查詢結果如下:

SELECT * FROM users WHERE limits LIKE  %2%

find_in_set()函數(shù)怎么在 mysql 中使用

這樣第二條數(shù)據(jù)不具有權限 2 的用戶也查出來了,不符合預期。下面利用 mysql 函數(shù) find_in_set()來解決。

SELECT * FROM users WHERE FIND_IN_SET(2,limits);

find_in_set()函數(shù)怎么在 mysql 中使用

這樣就能達到我們預期的效果,問題就解決了!

注意:mysql 字符串函數(shù) find_in_set(str1,str2)函數(shù)是返回 str2 中 str1 所在的位置索引,str2 必須以 , 分割開。

總結:like 是廣泛的模糊匹配,字符串中沒有分隔符,F(xiàn)ind_IN_SET 是精確匹配,字段值以英文”,”分隔,F(xiàn)ind_IN_SET 查詢的結果要小于 like 查詢的結果。

上述就是丸趣 TV 小編為大家分享的 find_in_set()函數(shù)怎么在 mysql 中使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業(yè)資訊頻道。

向 AI 問一下細節(jié)

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計2780字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 贵定县| 怀集县| 阿鲁科尔沁旗| 云阳县| 邵武市| 垫江县| 峨边| 新巴尔虎左旗| 灵宝市| 汝城县| 诸暨市| 中阳县| 会同县| 金湖县| 澎湖县| 丰城市| 镇巴县| 成武县| 鹿泉市| 凯里市| 汉沽区| 平舆县| 若尔盖县| 南康市| 沅江市| 阿巴嘎旗| 鹿邑县| 黄平县| 新龙县| 玛多县| 鄯善县| 海淀区| 龙井市| 涡阳县| 灌云县| 中阳县| 平顶山市| 石景山区| 伊川县| 望都县| 尤溪县|