一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - mysql中find_in_set函數的基本使用方法

mysql中find_in_set函數的基本使用方法

2021-02-27 18:14邁克絲 Mysql

這篇文章主要給大家介紹了關于mysql中find_in_set函數的基本使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

前言

這是我最近新接觸到的一個函數,

我在項目中的使用場景是這樣的:

有一個應用類型表,表中有parentId字段和parentIds字段,前者為父級id,后者為多級父級id,在庫中都是varchar類型,parentIds由多個父級id拼接而成由","分隔.

組長告知我可以使用該函數,就去進行了了解與使用.

語法

FIND_IN_SET(str,strlist)

定義

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

strlist:一個由英文逗號“,”鏈接的字符串,例如:"a,b,c,d",該字符串形式上類似于SET類型的值被逗號給鏈接起來。

示例:SELECT FIND_IN_SET('b','a,b,c,d'); //返回值為2,即第2個值

例子

有個文章表里面有個type字段,它存儲的是文章類型,有 1頭條、2推薦、3熱點、4圖文等等 。
現在有篇文章他既是頭條,又是熱點,還是圖文,type中以 1,3,4 的格式存儲。那我們如何用sql查找所有type中有4的圖文類型的文章呢?

這就可以使用 find_in_set 了。以下為引用的內容:

?
1
select * from article where FIND_IN_SET('4',type)

find_in_set()和in的區別:

弄個測試表來說明兩者的區別

?
1
2
3
4
5
6
7
8
9
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可以進行這樣的查詢:

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

mysql中find_in_set函數的基本使用方法

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

再來看看這個:

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

mysql中find_in_set函數的基本使用方法

這樣是可以的。

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

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

?
1
2
3
find_in_set():
 
SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- (一)的改進版

mysql中find_in_set函數的基本使用方法

總結

到此這篇關于mysql中find_in_set函數的基本使用方法的文章就介紹到這了,更多相關mysql find_in_set函數使用內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://segmentfault.com/a/1190000037679716

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费港剧在线观看港剧 | 九九热在线视频观看这里只有精品 | 九九精品久久 | 激情五月姐姐 | 久久综合狠狠综合久久综合88 | 国产精品免费一级在线观看 | 乌克兰bbw| 91视在线国内在线播放酒店 | 亚洲精品一区二区久久久久 | 99热这里只有精品国产免费 | 免费一级特黄特色大片 | 日韩a级片视频 | 久久无码人妻AV精品一区 | 日韩毛片在线视频 | 糖心视频在线观看 | 成人在线免费观看视频 | 国产免费美女视频 | 国产一区二区三区四卡 | freexxxxxhd张柏芝 | 日本zzzzwww大片免费 | 久久精品无码人妻无码AV蜜臀 | 亚洲男人天堂av | 妇乱子伦激情 | 超级碰碰青草免费视频92 | 嗯啊在线观看免费影院 | 海绵宝宝第二季全集免费观看 | 国产综合色在线视频区色吧图片 | 精品精品国产自在现拍 | 男人视频网| 爱豆传媒最新视频国产 | 亚洲视频日韩 | 亚洲品质水蜜桃 | 东北老女人91p0rny | 欧美色影视 | 4444kk在线看片 | 亚洲AV蜜桃永久无码精品无码网 | 粉嫩极品国产在线观看免费 | 波多野结衣中文字幕乱七八糟 | 亚洲激情在线 | 天天做天天爱天天爽综合网 | 欧美一级片免费在线观看 |