表 - 列數據搜索交陣列中逗號在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 :)
表 - 列數據搜索交陣列中逗號在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 :)
解決方案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
小號組合。
感謝隊友,更新了DB架構!,這讓我的生活更輕鬆 – epynic
將值存儲爲csv是非常不好的數據庫設計 – Jens
下次將記錄下謝謝 – epynic
您可以使用函數find_in_set在mysql中查找csv中的值 – Jens