mysql 中 find_in_set() 查詢出可變欄位用逗號分隔的目標
阿新 • • 發佈:2019-01-07
有時候我們在設計資料庫時有以下情況,如:
在視訊表中有個欄位week, 他儲存的是視訊在周幾播放,如某視訊只在周1,4,6播放,那麼week欄位對應的值以 1,4,6 的格式儲存
那們我們要用sql查詢所有視訊中周4可以播放的視訊 (這個時候不是用like能解決的,使用like可能查到我們不想要的記錄)
這時就需要 find_in_set()
mysql手冊中find_in_set函式的語法:
FIND_IN_SET(str,strlist)
假如字串str 在由N 子鏈組成的字串列表strlist 中,則返回值的範圍在 1 到 N 之間。一個字串列表就是一個由一些被‘,'符號分開的自鏈組成的字串。如果第一個引數是一個常數字符串,而第二個是
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2
mysql> SELECT * from video where find_in_set('4',week);
like是廣泛的模糊匹配,字串中沒有分隔符,find_in_set是精確匹配,欄位值以英文”,”分隔,
注意 find_in_set 是全表掃描的
再例如:
如果我們在開發中個,需要取出指定的某些資訊,可以通過 {dede:arclist flag=’h’} ,擴充套件使用,就是可以把管理員 推薦或是置頂的資訊,取出.
在mysql中,我們經常有這樣一個需求:比如:
friendlist表
id name friendsList
1 aaa 11,112,113
2 bbb 123,3112
需求是: 請查詢出好友包含 11的這個使用者id
想法:
select * from friendlist where friendList like ‘%11%’;
實際我們可以這樣解決select * from friendlist where find_in_set(‘11’,friendList);