sql >> Database >  >> RDS >> Mysql

MySQL-zoekopdracht voor 1,2,3,11,22,33 in veld

Allereerst is het problematisch om door komma's gescheiden waarden in een veld te gebruiken, en u kunt overwegen ze in plaats daarvan in een aparte tabel op te slaan. Dan zou je het record efficiënter kunnen krijgen:

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

Als dat niet mogelijk is, moet je de trage string-matching-manier volgen. Om de waarden in een door komma's gescheiden tekenreeks overeen te laten komen, kunt u de like . gebruiken operator:

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

Door het scheidingsteken aan beide zijden van de gezochte waarde te plaatsen, zorgt u ervoor dat u geen valse positieven krijgt. Door de komma's voor en na de veldwaarde toe te voegen, weet je zeker dat je de eerste en laatste waarde kunt vinden.



  1. Is er een manier om meerdere karakters in te korten (ongeacht hun combinatie) in MySQL?

  2. Hoe dynamische Postgres voorbereide statements te maken in PHP

  3. PLpgSQL-functie retourneert geen overeenkomende titels

  4. Selecteer alle maanden binnen een bepaalde periode, inclusief die met 0 waarden