Zwei Strings auf Übereinstimmung prüfen - advanced

soraxdesign

Erfahrenes Mitglied
Hallo,
ich habe ein Problem bei einer Abfrage: ich bekomme aus einem Formular ein Selectfeld mit mehreren Auswahlmöglichkeiten. Diese werden als int übergeben (ich bekomme also z.B. 1, 3 und 6 - diese stellen IDs dar). Diese füge ich per implode zu einem String A zusammen der folgendermaßen aufgebaut ist:

#1#3#6#

Nun habe ich in einer Spalte ein ähnliches Muster (String B) stehen, z.B. sowas:

#2#3#5#8#9#

Wie kann ich meine Abfrage gestalten, um die Schnittmenge von meinem String A und String B zu bekommen, wobei ich nur wissen will, ob irgendwelche int-Werte übereinstimmen (in diesem Falle wäre das ja die 3). Bisher habe ich immer mit in(...), jedoch geht das nur für einen String und nicht für meine Problem.

Danke für eure Hilfe!
 
Hallo,


ganz allgemein bspw. so:
SQL:
SELECT *
  FROM tabelle
 WHERE spalte LIKE '%#3#%'

aber auch so:
SQL:
SELECT * 
  FROM tabelle
 WHERE INSTR(<spalte>,'#3#')>0

und so weiter.

Allerdings finde ich dein "Datenmodell" nicht so gut, da es offenbar nicht der 1.Normalform entspricht (mehrere "IDs" in einer Datenbank-Spalte). Eventuell solltest du das ganze aufteilen, dann brauchst du keine Lösung wie oben.


Edit: ich sollte erstmal zuende lesen ;) So kannst du es leider nicht einsetzen.Wenn die Einträge in den DB-Spalten so aussehen, wie du es beschrieben hast, dann kannst du dir eventuell eine WHERE-Klausel dynamisch generieren für jede ID, die du suchst.
Die könnte z.B. lauten:
SQL:
WHERE 
   spalte LIKE '%#3#%' OR
   spalte LIKE '%#5#%' OR
   usw.

Besser kannst du es sicher mit Hilfe von Regûlar Expressions (RLIKE / REGEXP / REGEXP_LIKE usw.) lösen. Dann benötigst du nur einen Ausdruck.
z.B. so:

SQL:
SELECT * 
  FROM tabelle
 WHERE <spalte> RLIKE '#3#|#5#';

Dabei nutzt du das "ODER"-Zeichen "|", mit dem du nach mehreren Teilausdrücken parallel suchen kannst.

Hoffe es hilft ein wenig,
Markus
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück