![](/img/trans.png)
[英]I have a column which has comma separated value how to search these value with an array
[英]Search post array in comma separated column value
表 - 列數據
id | filter_data |
---|---------------
1 |2,3,45,67,4 |
2 |2,3,55,33,5,7|
從表單發布變量為
$search_filter = {2,3,4,5}
如何獲取搜索過濾器中的id
解決方案1:
正如@Jens 評論的那樣,將值存儲為 CSV 是一種糟糕的數據庫設計。 所以第一個解決方案是改變你的數據庫設計,因為我真的不知道你在存儲什么以及你的數據庫/代碼的目的是什么我無法編寫方案或給出任何有意義的建議。
解決方案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
運算符。 (有些成員可能會因為建議而殺了我,但如果你不想改變你的數據庫設計 - 這是一個創造性的選擇)。
讓我們檢查以下代碼:
SELECT id FROM table WHERE filter_data LIKE '%2,%'
問題是它會在 filter_data 的列中返回一個22,
的字段的 id。 因此,您必須更改該列下的數據,因此,
也將顯示為第一個和最后一個字符。 例如:
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,%'
如果您有多個“搜索過濾器”,您可以將LIKE
與OR
運算符結合使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.