Solution 1 :
Comme @Jens l'a commenté, c'est une mauvaise conception de base de données de stocker des valeurs au format CSV. La première solution serait donc de modifier la conception de votre base de données car je ne sais pas vraiment ce que vous stockez et quel est le but de votre base de données/code I ne peut pas écrire un schéma ou donner une suggestion significative.
Solution 2 :
Utilisez MySQL find_in_set
fonction.
SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)
Solution 3 :
Vous pouvez utiliser le LIKE
opérateur. (Certains membres vont probablement me tuer pour l'avoir suggéré, mais si vous ne voulez pas changer la conception de votre base de données, c'est une option créative).
Vérifions le code suivant :
SELECT id FROM table WHERE filter_data LIKE '%2,%'
Le problème est qu'il renverra l'id d'un champ avec 22,
dans la colonne filter_data.Par conséquent, vous devrez modifier les données sous cette colonne afin que ,
apparaîtra également comme premier et dernier caractères. Par exemple :
id | filter_data |
---|---------------
1 |,2,3,45,67,4, |
2 |,2,3,55,33,5,7,|
Et maintenant, vous pouvez faire ce qui suit :
SELECT id FROM table WHERE filter_data LIKE '%,2,%'
Si vous avez plusieurs "filtres de recherche", vous pouvez combiner le LIKE
s avec un OR
opérateur.