Morgen,
also:
Zu deinem Edit nochmal - gestern hatte wohl mein Hirn bissle Probleme.
Wir haben folgende Strings, die verglichen werden:
Code:
foo/xyz
foo/bar
foo/yoo/boo
Wir haben folgenden Inhalt in meiner Tabelle:
SQL:
SELECT * FROM test;
++++++++++++
foo/%/bar
Folgend sind meiner Ergebnisse:
Code:
SELECT * FROM `test` WHERE 'foo/asd' LIKE field1 => kein Treffer
SELECT * FROM `test` WHERE 'foo/bar' LIKE field1 => kein Treffer
SELECT * FROM `test` WHERE 'foo/yoo/boo' LIKE field1 => kein Treffer
SELECT * FROM `test` WHERE 'foo/blaa/bar' LIKE field1 => Treffer
Also, wie man erkennt, bekomme ich nur Treffer, wenn am Anfang 'foo/' und
am Ende '/bar' steht.
Wenn du aber in der Tabelle ´test´ ein Eintrag "foo/%" hast, dann ist klar, dass
dieser *immer* getroffen wird - das löst du auch nicht mit regexp - denn
das ist genauso ein eindeutiger Treffer wie einer, der ein bisschen, ich sag mal, "genauer" ist.
Noch etwas als Hinweis
SQL:
SELECT * FROM `test` WHERE 'foo/yoo/bar' REGEXP CONCAT( '^',REPLACE(field1,'%', '.*'), '$')
Sowas geht natürlich auch - also musste deine Daten garnicht umschreiben, um
REGEXP zu benutzen, auch wenn das im zweifelsfall langsam ist (ich schätz bei > 100.000 einträge wirste es merken)
Ob das nun irgendwie zur Lösung deines Problems hilft, kann ich nicht beurteilen.
Weil, wie schon geschriebe, die Beispielstring, die du oben genannt hast, greifen bei mir nicht und so bekomme ich nur den Treffer, den ich will - außer, ja außer natürlich
Du hast in der Tabelle ein Wert, der als letztes Zeichen ein "%" hat - aber ist logisch.
Grüße und viel Glück,
MArc