Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Suche nach 1,2,3,11,22,33 im Feld

Zunächst einmal ist die Verwendung von kommagetrennten Werten in einem Feld problematisch, und Sie sollten erwägen, sie stattdessen in einer separaten Tabelle zu speichern. Dann könnten Sie den Datensatz effizienter erhalten:

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

Wenn das nicht möglich ist, müssen Sie den langsamen String-Matching-Weg gehen. Um die Werte in einer kommagetrennten Zeichenfolge abzugleichen, können Sie den like verwenden Betreiber:

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

Das Setzen des Trennzeichens auf beiden Seiten des gesuchten Werts stellt sicher, dass Sie keine Fehlalarme erhalten. Das Hinzufügen der Kommas vor und nach dem Feldwert stellt sicher, dass Sie den ersten und letzten Wert finden können.