ソリューション1:
@Jensがコメントしたように、値をCSVとして保存するのは悪いDB設計です。したがって、最初の解決策は、何を保存しているか、DB /コードの目的がわからないため、DB設計を変更することです。スキームを書いたり、意味のある提案をしたりすることはできません。
ソリューション2:
MySQLのfind_in_set<を使用します/ code>
機能。
SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)
ソリューション3:
LIKE
を使用できます オペレーター。 (一部のメンバーはおそらくそれを提案したことで私を殺すでしょうが、DBデザインを変更したくない場合は、これは創造的なオプションです)。
次のコードを確認しましょう:
SELECT id FROM table WHERE filter_data LIKE '%2,%'
問題は、 22、
のフィールドのIDが返されることです。 filter_dataの列にあります。したがって、その列の下のデータを変更する必要があるため、、
最初と最後の文字としても表示されます。例:
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
を組み合わせることができます s OR
オペレーター。