Soluzione 1:
Come ha commentato @Jens, è un cattivo design del DB memorizzare i valori come CSV. Quindi la prima soluzione sarebbe cambiare il design del tuo DB poiché non so davvero cosa stai memorizzando e qual è lo scopo del tuo DB/codice I non posso scrivere uno schema o dare alcun suggerimento significativo.
Soluzione 2:
Usa find_in_set
funzione.
SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)
Soluzione 3:
Puoi usare il LIKE
operatore. (Alcuni membri probabilmente mi uccideranno per averlo suggerito, ma se non vuoi cambiare il design del tuo DB, questa è un'opzione creativa).
Controlliamo il seguente codice:
SELECT id FROM table WHERE filter_data LIKE '%2,%'
Il problema è che restituirà l'id di un campo con 22,
nella colonna filter_data. Pertanto, dovrai modificare i dati in quella colonna quindi ,
apparirà anche come primo e ultimo carattere. Ad esempio:
id | filter_data |
---|---------------
1 |,2,3,45,67,4, |
2 |,2,3,55,33,5,7,|
E ora puoi fare quanto segue:
SELECT id FROM table WHERE filter_data LIKE '%,2,%'
Se hai più "filtri di ricerca" puoi combinare il LIKE
s con un OR
operatore.