天天看點

關于MySQL——find_in_set()函數的使用

一、背景

在做電商項目時,會遇到這樣的一種情況,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%';