Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL cerca 1,2,3,11,22,33 nel campo

Prima di tutto, l'utilizzo di valori separati da virgola in un campo è problematico e dovresti considerare di archiviarli in una tabella separata. Quindi potresti ottenere il record in modo più efficiente:

select ...
from mainTable t
inner join valueTable v1 on v1.id = t.id and v1.value = 1
inner join valueTable v2 on v2.id = t.id and v2.value = 2
inner join valueTable v3 on v3.id = t.id and v3.value = 3

Se ciò non è possibile, devi seguire il modo lento di corrispondenza delle stringhe. Per abbinare i valori in una stringa separata da virgole, puoi utilizzare il like operatore:

... where
  concat(',', someField, ',') like '%,1,%' and
  concat(',', someField, ',') like '%,2,%' and
  concat(',', someField, ',') like '%,3,%'

L'inserimento del separatore su entrambi i lati del valore cercato assicura di non ottenere falsi positivi. L'aggiunta delle virgole prima e dopo il valore del campo assicura che tu possa trovare il primo e l'ultimo valore.