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

MySQL søg efter 1,2,3,11,22,33 i feltet

Først og fremmest er det problematisk at bruge kommaseparerede værdier i et felt, og du bør overveje at gemme dem i en separat tabel i stedet. Så kunne du få posten mere 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
 

Hvis det ikke er muligt, skal du gå den langsomme strengmatchende vej. For at matche værdierne i en kommasepareret streng kan du bruge like operatør:

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

Ved at sætte separatoren på begge sider af den søgte værdi sikrer du, at du ikke får falske positiver. Tilføjelse af kommaer før og efter feltværdien sikrer, at du kan finde den første og sidste værdi.



  1. At finde kombinationer af specifikke værdier

  2. udløser hvis andet

  3. MySQL deadlock-fejl

  4. Hvordan forespørger man denne MySQL-tabel på den mest effektive måde?