sql >> Databasteknik >  >> RDS >> Mysql

MySQL-sökning efter 1,2,3,11,22,33 i fältet

Först och främst är det problematiskt att använda kommaseparerade värden i ett fält, och du bör överväga att lagra dem i en separat tabell istället. Då kan du få posten mer effektivt:

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

Om det inte är möjligt måste du gå den långsamma strängmatchningsvägen. För att matcha värdena i en kommaseparerad sträng kan du använda like operatör:

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

Genom att placera avgränsaren på båda sidor av det sökta värdet säkerställer du att du inte får några falska positiva resultat. Att lägga till kommatecken före och efter fältvärdet ser till att du kan hitta det första och sista värdet.



  1. Ring BI Publisher webbtjänst med ReportRawData

  2. MySQL GROUP_CONCAT med COLUMN SPLIT

  3. MySQL-tabell med fast antal rader?

  4. Mysql INSTR liknande operation i mongodb