2015-06-08 114 views
-1

表 - 列數據搜索交陣列中逗號在MYSQL分隔的列值

id | filter_data | 
---|--------------- 
1 |2,3,45,67,4 | 
2 |2,3,55,33,5,7| 

郵政變量從形式

$search_filter = {2,3,4,5} 

我怎樣才能獲得id其在搜索過濾器

謝謝

UPDATE:

對不起朋友如此糟糕的問題:(

DB design changed,No longer need this :) 
+5

將值存儲爲csv是非常不好的數據庫設計 – Jens

+0

下次將記錄下謝謝 – epynic

+0

您可以使用函數find_in_set在mysql中查找csv中的值 – Jens

回答

1

解決方案1:

由於@Jens評論說,這是一個壞DB設計來存儲值爲csv。 所以第一個解決方案是改變你的數據庫設計,因爲我不知道你在存儲什麼,你的db/code的目的是什麼,我不能寫一個方案或給出任何有意義的建議。

解決方案2:

使用MySQL的find_in_set功能。

如果字符串str位於由N個子字符串組成的 字符串列表strlist中,則返回範圍爲1到N的值。字符串列表是一個 字符串,由以「,」字符分隔的子字符串組成。如果 第一個參數是一個常量字符串,第二個參數是類型爲 SET的列,則FIND_IN_SET()函數將優化爲使用位算術。 如果str不在strlist中,或者strlist是空字符串,則返回0。 如果任一參數爲NULL,則返回NULL。如果第一個參數包含一個逗號(「,」)字符,則該函數不能正常工作 。

SELECT id FROM table 
WHERE FIND_IN_SET(searchFilterHere, filter_data) 

解決方案3:

可以使用LIKE操作。 (有些成員可能會因爲暗示我而殺了我,但是如果你不想改變你的db設計 - 這是創造性的選擇)。

讓我們來看看下面的代碼:

SELECT id FROM table WHERE filter_data LIKE '%2,%' 

的問題是,它會在filter_data的列返回字段的ID與22,。 因此,您必須更改該列下的數據,因此,也會顯示爲第一個和最後一個字符。 例如:

id | filter_data | 
---|--------------- 
1 |,2,3,45,67,4, | 
2 |,2,3,55,33,5,7,| 

現在你可以做到以下幾點:

SELECT id FROM table WHERE filter_data LIKE '%,2,%' 

如果您有多個「搜索過濾器」,你可以用OR運營商LIKE小號組合。

+0

感謝隊友,更新了DB架構!,這讓我的生活更輕鬆 – epynic