一、背景
在做電商項目時,會遇到這樣的一種情況,mysql資料庫中商品表tb_product裡面有個字段type,它存儲的是商品類型,比如:
1:熱門推薦;
2:精選推薦;
3:品牌商品等。
有些商品既屬于熱門推薦,也屬于精選推薦,同時還是品牌商品,系統中type中用 1,2,3 這樣的格式存儲。
這時業務人員希望你幫忙導出今日所有type中有3品牌商品的商品,你會怎麼做?
這時find_in_set函數就派上用場了。
select * from tb_article where find_in_set('3',type);
二、find_in_set函數的文法
FIND_IN_SET(str,strlist)
str 要查詢的字元串
strlist 字段名 參數以”,”分隔 如 (1,2,6,8)
查詢字段(strlist)中包含(str)的結果,傳回結果為null或記錄。
例子:
mysql> SELECT FIND_IN_SET('b', 'a,b,c,d');
-> 2 因為b 在strlist集合中放在2的位置 從1開始。
二、常見用法
1、find_in_set() 和 in 的差別:
FIND_IN_SET(str,strlist)
strlist是常量,則可以直接用IN
例子:
select * from user where user_id in (1,2,3); ----可以用IN。
select * from user where user_id in (list); ---不可用,傳回為空。list為一個變量。
select * from user where user_id find_in_set('1',list);-- 可用,正确傳回。
2、find_in_set() 和 like的差別:
like是廣泛的模糊比對,字元串中沒有分隔符,Find_IN_SET 是精确比對,字段值以英文”,”分隔
例子:
SELECT * FROM users WHERE limits LIKE '%2%';