Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 07.03.2009, 03:04 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard MySQL RegExp nächste Zeile

Hallo Leute,

mich beschäftigt die Frage der RegEx - Funktionen von MySQL schon seit geraumer Zeit. Es geht darum, dass ich statt hunderte Datenbankeinträge in PHP zu laden und dort dann zu verarbeiten gerne die Verarbeitung in MySQL vornehmen würde, sodass PHP wirklich nur die Arbeit bewältigen muss, für die eine Datenbank nicht zuständig ist.

Genauer gesagt geht es um das Problem der Syntax.
Es ist so, dass ich
Code:
'SPALTENNAME' REGEXP 'der reguläre Ausdruck'
syntaktisch vorgegeben habe.

Ich hätte aber gerne
Code:
'ein String aus PHP übergeben' REGEXP 'der reguläre Ausdruck'
wobei beim regulären Ausdruck eine Spalte durchlaufen wird, deren Inhalte reguläre Ausdrücke sind. Den String aus PHP möchte ich auf die regulären Ausdrücke prüfen und alle Datenbankeinträge zurückliefern, deren reguläre Ausdrücke ein positives Ergebnis hatten.

Mit anderen Worten:
Im String sind viele Worte in variabler Reihenfolge.
In den Spalten für die RegExp sind reguläre Ausdrücke für ein Wort oder eine Wortgruppe enthalten.
Lautet der String nun "In Berlin wohnt Anton", und in der Datenbank liegen folgende Datensätze in Form von regulären Ausdrücken vor (hier natürlich nicht weiter - der Einfachheit halber - abstrakt dargestellt

Dresden, Leipzig, Maria, Martin, Berlin, Eduard, Potsdam, Anton

Dann möchte ich, dass mir die ID vom Datensatz Berlin und Anton zurückgeliefert wird.

Folgende Herangehensweisen hatte ich schon:
Der Suchstring wird versucht in RegExp-Form umzuschreiben, in der Datenbank stehen dann nur die Namen. Dann könnte ich die Standardsyntax anwenden.
- verworfen, weil Rechtschreibfehler so nie berücksichtigt werden konnten

Den String wortweise zurechtschneiden und dann via LIKE suchen
- verworfen, weil ebenfalls Rechtschreibfehler unberücksichtigt blieben

Lösungsvorschlag: Die regulären Ausdrücke werden geprüft, ob sie auf einen festen Parameter passen ('Suchstring' RegExp 'Spalten mit regulärem Ausdruck') statt das ich auf variable Parameter einen festen regulären Ausdruck anwende ('Spalte mit Suchstring' RegExp 'regulärer Ausdruck' - wobei zwischen den einzelnen Suchstringworten ein OR stehen würde).
- verworfen aus vier Gründen:
a) der reguläre Ausdruck muss bei der Standardsyntax über den Suchstring in PHP zusammengebaut werden - keine Berücksichtigung von Rechtschreibfehlern
b) meine Hoffnung mit dem festen Parameter wurden syntaxbedingt nicht unterstützt (oder ich hab was überlesen?)
c) ich muss den Suchstring in eine Tabelle zwischenspeichern, weil siehe b)
d) darauß folgen zu hohe Performancebelastungen


Ich finde einfach keine Lösung.
Selbst wenn die Datenbank wüsste, dass auf "Anton" der reguläre Ausdruck "^Anton$" passt ('Anton' REGEXP '^Anton$'), würde das ganze nicht laufen, weil MySQL annimmt, dass 'Anton' eine Tabellenspalte ist und kein String, in dem der reguläre Ausdruck ^Anton$ gesucht wird.
Die einzige Möglichkeit wäre eine Methode, bei der MySQL 'Anton' als String annimmt und die regulären Ausdrücke durch einen Subquery in ein Array gepackt werden (geht meines Wissens nach nicht) und dieses dann Eintrag um Eintrag durchlaufen wird, oder MySQL aber annimmt, dass an der Stelle von ^Anton$ ein Spaltenname steht, dessen Inhalt den RegExp enthält, der angwendet werden soll.
Also quasi die Standardsyntax einmal umgedreht.

Ich weiß leider nicht, wie ich das realisiere und habe diesbezüglich schon mal eine Anfrage ins Forum gestellt.

Eine neue Idee von mir ist nun, dass es vielleicht eine Möglichkeit gibt, MySQL zu zwingen, Ergebnisse zeilenweise durchzugehen. Wenn ich also in Kauf nehme, dass ich den Suchstring wirklikch einmal abspeichern muss, dass ich dann wenigstens sagen kann
'Spalte mit Suchstring' REGEXP (SELECT 'SPALTE MIT REGEX' FROM...)
wobei die Ergebnisse des SELECTs ähnlich wie beim mysql_fetch_array zeilenweise durchgegangen werden.

Eine Möglichkeit hierfür bietet Fetch (http://dev.mysql.com/doc/refman/5.1/de/fetch.html) , wobei ich aber nicht weiß, was ein Cursor ist, wie performant er arbeitet und und und. Mir fehlen hierfür auch zurzeit die Testmöglichkeiten. Auch weiß ich nicht, ob FETCH wirklich das tut, was ich hier beschreibe - nämlich nur ein Argument für den regulären Ausdruck an REGEXP zu übergeben, anstatt viele, wie es bei einem SELECT der Fall wäre.
Ich kann Fetch leider zurzeit auch nicht testen.

Ich bin für jeden Tipp dankbar!

Gruß
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.03.2009, 15:45 Nach oben    #2
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Hi,

ich habe mir heute noch ein paar Webseiten zum Thema Cursor und Fetch angesehen, allerdings keine brauchbaren Tutorials gefunden.
Mithilfe von MYSQL-eigenen Kontrollstrukturen könnte ich mein Problem vielleicht lösen - hat jemand dazu Referenzen?

Gruß
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Server] LAMPP mit ftp, openSSL, msmtp, webalizer und phpmyadmin in einer chroot Jann Hendrik Tutorials 4 24.02.2009 14:55
Dynamischer MySQL-Query in MySQL Sekundentakt Datenbanken 11 14.01.2009 09:05
ssh tunnel zu einer mysql datenbank beny_mcde Datenbanken 4 07.06.2006 16:05
MySQL 5.1 kommt in die Beta-Phase Ben Nachrichten 1 02.03.2006 14:31
Applet mit Canvas-Objekt Carsten Allgemeine Java-Programmierung 3 16.10.2005 11:44


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47