MySQL---查詢某個字段內容中存不存在某個數據,與like不同(FIND_IN_SET(str,strlist))

定義:

  1. 假如字符串str在由N子鏈組成的字符串列表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個值

測試代碼:

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 * fromtestwhere '測試' IN (list);
得到結果空值.
test2:sql = select * fromtestwhere FIND_IN_SET('測試',path);
得到三條數據。

順便說一下TP中的用法的:

$map[]=['exp','FIND_IN_SET('.$uid.',path)'];
$paths=Db::table('member')->where($map)->select();

exp查詢的條件不會被當成字符串,所以後面的查詢條件可以使用任何SQL支持的語法,包括使用函數和字段名稱。

最後強調一下,字段中存的數據必須是以逗號隔開的數據,查詢時,第一個參數不能帶逗號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章