Oft kommt es vor, dass man prüfen muss, ob verschiedene Werte in einem Datensatz vorkommen. Schwierig wird das, wenn das zu prüfende Feld den zu prüfenden Wert nicht ausschließlich enthält, sondern noch weiteren Text. In diesem Fall hilft LIKE nur, wenn man die Werte hardcoded in das Statement schreibt:

SELECT * FROM tabelle WHERE
text LIKE '%mySearchString%'
OR text LIKE '%bar%'
OR text LIKE '%baz%'
OR text LIKE '%foo%'

Schlimmer wird es noch, wenn man aufgrund dieser Abfrage ein Feld ändern will. Aber richtig verzwickt wird es, wenn die Suchbegriffe auch aus einer Tabelle kommen. Trotzdem gibt es dafür Möglichkeiten. Eine Lösung ist die Nutzung regulärer Ausdrücke. Die Abfrage könnte dann so aussehen:

SELECT * FROM tabelle WHERE
text REGEXP (SELECT GROUP_CONCAT(suche SEPARATOR '|') FROM suchtabelle)

Hier wird das Feld „text“ in der Tabelle „tabelle“ mit den Suchbegriffen („suche“ in „suchtabelle“) abgeglichen und nur diese, die einen Suchbegriff enthalten werden selektiert. Dieses Konstrukt kann man dann auch verwenden, wenn man eine Tabelle updaten will:

UPDATE tabelle SET gefunden=1 WHERE
text REGEXP (SELECT GROUP_CONCAT(suche SEPARATOR '|') FROM suchtabelle)

Hiermit setzt man ein Flag, wenn ein Suchbegriff gematched hat.

Nächster Beitrag Vorheriger Beitrag