定義:
- 假如字符串str在由N子鏈組成的字符串列表strlist中,則返回值的範圍在1到N之間。
- 一個字符串列表就是一個由一些被‘,’符號分開的自鏈組成的字符串。
- 如果第一個參數是一個常數字符串,而第二個是typeSET列,則FIND_IN_SET()函數被優化,使用比特計算。
- 如果str不在strlist或strlist爲空字符串,則返回值爲0。
- 如任意一個參數爲NULL,則返回值爲NULL。
這個函數在第一個參數包含一個逗號(‘,’)時將無法正常運行。
strlist:一個由英文逗號“,”鏈接的字符串,例如:“a,b,c,d”,該字符串形式上類似於SET類型的值被逗號給鏈接起來。
示例:SELECT FIND_IN_SET(‘b’,‘a,b,c,d’); //返回值爲2,即第2個值
測試代碼:
CREATE TABLE `test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`path` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `test` VALUES (1, '張三', '測試,實驗,結束');
INSERT INTO `test` VALUES (2, '李四', '結束,測試,實驗');
INSERT INTO `test` VALUES (3, '王五', '實驗,結束,測試');
test1:sql = select * from
testwhere '測試' IN (list);
得到結果空值.
test2:sql = select * from
testwhere FIND_IN_SET('測試',path);
得到三條數據。
順便說一下TP中的用法的:
$map[]=['exp','FIND_IN_SET('.$uid.',path)'];
$paths=Db::table('member')->where($map)->select();
exp查詢的條件不會被當成字符串,所以後面的查詢條件可以使用任何SQL支持的語法,包括使用函數和字段名稱。
最後強調一下,字段中存的數據必須是以逗號隔開的數據,查詢時,第一個參數不能帶逗號。