sql >> Databasteknik >  >> RDS >> Mysql

Sök postarray i kommaseparerat kolumnvärde

Lösning 1:

Som @Jens kommenterade är det en dålig DB-design att lagra värden som CSV. Så den första lösningen skulle vara att ändra din DB-design eftersom jag inte riktigt vet vad du lagrar och vad som är syftet med din DB/kod I kan inte skriva ett schema eller ge något meningsfullt förslag.

Lösning 2:

Använd MySQL:s find_in_set funktion.

SELECT id FROM table
WHERE FIND_IN_SET(searchFilterHere, filter_data)

Lösning 3:

Du kan använda LIKE operatör. (Vissa medlemmar kommer förmodligen att döda mig för att jag föreslår det, men om du inte vill ändra din DB-design - detta är ett kreativt alternativ).

Låt oss kontrollera följande kod:

SELECT id FROM table WHERE filter_data LIKE '%2,%'

Problemet är att det kommer att returnera ID:t för ett fält med 22, i filter_datas kolumn. Därför måste du ändra data under den kolumnen så att , visas också som det första och sista tecknet. Till exempel:

id | filter_data   |
---|---------------
1  |,2,3,45,67,4,  |
2  |,2,3,55,33,5,7,|

Och nu kan du göra följande:

SELECT id FROM table WHERE filter_data LIKE '%,2,%'

Om du har flera "sökfilter" kan du kombinera LIKE s med en ELLER operatör.




  1. mysql - hur många kolumner är för många?

  2. Mysql där id är i array

  3. Hur väljer man optimerade datatyper för kolumner [innodb-specifik]?

  4. Hur mappar man en MySQL char(n)-kolumn till en instansvariabel med en JPA/Hibernate-anteckning?