2011-03-17 50 views
6

我有一個使用了一組數據類型中的一個字段,並檢查該字段包含我用MySQL的WHERE SET數據類型包括項目

SELECT * FROM table WHERE myset LIKE %value%; 

這工作的大部分時間的特定元素表,但兩個潛在值有相同的單詞,即一個可能的元素是Poodle,另一個是玩具貴賓犬。如果我做

SELECT * FROM table WHERE myset LIKE %Poodle%; 

它返回所有具有Poodle或Toy Poodle的行。我希望它只在該字段包含Poodle時纔會返回。如果我刪除通配符,它​​將只返回只有Poodle的行。所以基本上,如果表是:

id | myset 
------------------------- 
1 | "Poodle" 
2 | "Toy Poodle" 
3 | "Poodle","Toy Poodle" 
4 | "Toy Poodle","Poodle" 

我需要一個select語句,將返回1,3和4但不是2。這可能嗎?

回答

11

你需要做的:SELECT * FROM table WHERE FIND_IN_SET('Poodle',myset)>0documentation

+0

不知道我是怎麼忽略的......現在感覺有點愚蠢。那是我得到的信息使用LIKE%...%,只是不知何故錯過了我現在知道的FIND_IN_SET部分 – awestover89 2011-03-17 23:04:09

+0

。很高興在我的大腦數據庫中添加另一組知識 – reignsly 2018-02-09 01:42:04

1
SELECT * FROM table WHERE FIND_IN_SET('"Poddle"', myset) > 0 

尋找"描述將是重要的,以消除記錄#2

0

對不起,如果我在這裏完全錯過了點,但卻是你的結果集中的引號實際存儲在數據庫中?

我的意思是,做的第一排相同的實際價值...

"Poodle" 

...或者你剛纔引用,以用於演示這些值,在這種情況下,第一值實際上是...

Poodle 

唯一原因,我想問的是,爲什麼不只是做一個查詢像...

SELECT * FROM table WHERE myset LIKE '%"Poodle"%'; 

鴨如果我已經大量地忽略了這一點,或者超越了承認的過度簡化的話。

不管怎麼樣,祝你好運!

+1

不,報價不存儲在數據庫中我只是用它們在問題中進行表示以表示每個都是單獨的可能值 – awestover89 2011-03-17 23:09:54

+0

因此實際的id 2字符串是貴賓犬,玩具獅子狗 – BizNuge 2011-03-17 23:42:08