簡體   English   中英

以逗號分隔的列值搜索帖子數組

[英]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,%'

如果您有多個“搜索過濾器”,您可以將LIKEOR運算符結合使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM