Rozwiązanie 1:
Jak skomentował @Jens, to zły projekt DB do przechowywania wartości jako CSV. Więc pierwszym rozwiązaniem byłaby zmiana projektu DB, ponieważ tak naprawdę nie wiem, co przechowujesz i jaki jest cel twojego DB/kodu. nie może napisać schematu ani podać żadnej sensownej sugestii.
Rozwiązanie 2:
Użyj find_in_set
funkcja.
SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)
Rozwiązanie 3:
Możesz użyć LIKE
operator. (Niektórzy członkowie prawdopodobnie zabiją mnie za to, że to zasugerowałem, ale jeśli nie chcesz zmieniać projektu DB - to jest twórcza opcja).
Sprawdźmy następujący kod:
SELECT id FROM table WHERE filter_data LIKE '%2,%'
Problem polega na tym, że zwróci identyfikator pola z 22,
w kolumnie filter_data. Dlatego musisz zmienić dane w tej kolumnie, tak aby ,
pojawi się również jako pierwszy i ostatni znak. Na przykład:
id | filter_data |
---|---------------
1 |,2,3,45,67,4, |
2 |,2,3,55,33,5,7,|
A teraz możesz wykonać następujące czynności:
SELECT id FROM table WHERE filter_data LIKE '%,2,%'
Jeśli masz wiele „filtrów wyszukiwania”, możesz połączyć LIKE
s z LUB
operatora.