MySql - REGEXP
Helmuth
- datenbank
Moin,
ich habe folgende Tabelle
1 | www.domain.de?aid=2&a=b
2 | www.domain.de?aid=3&a=f
3 | www.domain.de?aid=7&a=g
4 | www.domain.de?aid=6&a=w
5 | www.domain.de?aid=1&a=z
Num möchte ich per SELECT mit einer REGEXP die aid's herausfiltern.
gewünschtes Ergebnis
2
3
7
6
1
Wenn ich die REGEXP einbaue bekomme ich, wie ja auch auf mysql.com beschrieben nur TRUE oder FALSE. Ich möchte aber den gesuchten Wert ermitteln. Hat jemand eine Lösung parat?
Danke
Helmuth
Hallo,
scheint es als Funktion nicht direkt in deiner Version von MySql zu geben. Da fällt mir auf Anhieb nur ein, erstmal das gesamte Feld abzufragen und die Extraktion des Wertes von aid dann per PHP (mit Regexp) durchzuführen.
Gruss, Frank
Ja, das vermute ich nach meiner Recherche auch fast, macht das Ganze aber sicher sehr langsam. Dachte es müsste sowas auch direkt in MySql geben.
Dann werd ich es wohl über PHP lösen müssen.
Sonst noch jemand ne Idee?
Gruss
Helmuth
Hallo,
scheint es als Funktion nicht direkt in deiner Version von MySql zu geben. Da fällt mir auf Anhieb nur ein, erstmal das gesamte Feld abzufragen und die Extraktion des Wertes von aid dann per PHP (mit Regexp) durchzuführen.
Gruss, Frank
Ach das glaub ich nicht mal, dass es so viel langsamer ist, du musst die Ergebnisse ja sowieso in einer Schleife ausgeben, so ein bisschen Regex Zeugs sollte da nicht so schwer ins Gewicht fallen. Und MySQL hätte ja sonst auch dieselbe Arbeit. Nur ist es da vielleicht etwas effektiver programmiert ... teste es am besten mal aus und entscheide dann, ob es dir zulangsam ist. :)
Eine andere variante wäre, du zerlegst den String schon vor der Speicherung in MySQL, zusammensetzen kannst du ihn immer wieder mit ? und &.
Gruss, Frank
Sonst noch jemand ne Idee?
Wie wärs mit Substring?
Hallo
id | string
1 | www.example.org?aid=2&a=b
2 | www.example.org?aid=3&a=f
3 | www.example.org?aid=7&a=g
4 | www.example.org?aid=6&a=w
5 | www.example.org?aid=1&a=z
Num möchte ich per SELECT mit einer REGEXP die aid's herausfiltern.
das geht nicht, nicht mit REGEXP.
gewünschtes Ergebnis
aid
2
3
7
6
1
Schön. Das fehlt in vielen Fragestellungen.
Wenn ich die REGEXP einbaue bekomme ich, wie ja auch auf mysql.com beschrieben nur TRUE oder FALSE.
Deswegen geht es ja auch nicht mit REGEXP.
Ich möchte aber den gesuchten Wert ermitteln. Hat jemand eine Lösung parat?
Suche die Position von "?aid=" in der Zeichenkette.
Suche das erste Auftreten von "&" ab dieser Position.
Dazu kannst Du LOCATE verwenden.
Nimm die Zeichenkette dazwischen, nutze dazu SUBSTRING.
Wie bereits empfohlen wurde, wäre es wahrscheinlich eine gute Idee,
die Parameter in eigenen Feldern zu speichern. Diese Suche skaliert
schlecht.
Freundliche Grüße
Vinzenz