Julchen: & MySQL & RegEx: Assertions in Datenbankabfrage?

Beitrag lesen

Hallo ;)

"SELECT * FROM tabelle WHERE spalte REGEXP '1x2[^0-9]' OR '[^0-9]1x2'"

Kann mir kaum vorstellen, dass das schon die finale korrekte Lösung ist.

Wenn du nach "1x2" suchst, und ausschließen willst, dass vor der 1 noch Ziffern kommen, und auch nach der 2, dann ist das EIN regulärer Ausdruck für mich.

Und auch deine WHERE-Bedingung schaut extrem merkwürdig aus. Es gibt nämlich keine REGEXP-Verknüpfung mit OR. Das, was du da produziert hast, ist folgendes (geklammert zur Verdeutlichung):
(spalte REGEXP '1x2[^0-9]') OR ('[^0-9]1x2')

Also der Regex-Vergleich oder ein konstanter String. Wundert mich, dass das ohne Fehlermeldung durchgeht.

  • Sven Rautenberg

DANKE für Deine Antwort ;) Und Du hattest Recht! Im phpmyadmin hat meine Lösung oben zwar ohne meckern funktioniert, aber in der php-Datei sah das Ergebnis merkwürdig aus!

Ich hab's nochmal anders geschrieben - und zwar folgendermaßen:
$abfrage = "SELECT * FROM tabelle WHERE spalte REGEXP '(1x2[^0-9])|([^0-9]1x2)|(^1x2$)'";

Scheinbar müssen die [ escaped werden, damit's klappt - das war mir auch noch nicht so klar...

Ich bin natürlich für jede weitere Kritik offen - man lernt immer dazu! ;)

Julchen