Levenshtein in SQL-Abfrage

tombe

Erfahrenes Mitglied
Hi,

ich habe eine DB mit verschiedenen Adressen.

Hierfür will ich nun eine Abfrage erstellen, in der die Levenshtein Funktion zur Verwendung kommt.
Hab jetzt schon einiges probiert und auch hier gesucht, aber ein Beispiel wie man die Funktion in die Abfrage einbaut hab ich leider nicht gefunden.

So hab ich es z.B. probiert :
Code:
SELECT name, strasse, plz, ort FROM adresse WHERE LEVENSHTEIN(strasse, $_POST["strasse"]) < 5

Gesucht wird die "Hauptstrasse" und als Suchbgeriff habe ich "Hauptstraße" eingegeben.

Aber selbst wenn anstelle 5 die Zahl 100 nehme erhalte ich kein Ergebnis zurück. Ein Fehler wird mir aber auch nicht angezeigt, scheinbar wird die Abfrage an sich also durchgeführt.

Was mach ich falsch

Danke schonmal

Thomas
 
Ich würde mal vermuten, dass das daran liegt, dass SQL die Funktion nicht kann (das hab ich jetzt nicht nachgeschaut) ... ich würde das entsprechend so ausklappern, dass PHP das ausrechnet und dann das Ergebnis in das SQL einsetzt...
 
Hi Divi,

was meinst Du mit "...ausklappern..."

Dann müßte ich ja alle Datensätze in einer Schleife durchgehen, der Vergleich durchführen und die Treffer dann z.B. in einem Array zwischenspeichern.

Ist nicht gerade der ideale Weg. Gibt es da nichts was besser funktioniert?
 
Jo - erstens sollte es bei mir "abklappern" heißen :-D ... vertippt :-D ... Dann: Wie Gumbo schon und du schon anmerkten: Entweder alles einzeln durchlaufen oder nachinstallieren, wenn möglich....
 
vielleicht hilft dir ja SOUNDEX; diese funktion ist schon bei mysql 4 dabei ohne dass du etwas nachinstallieren musst...

Ich habe mal eine Ortssuche programmiert und dabei im ersten schritt soundex verwendet um alle relevanten ergebnisszeilen zu finden und dann im zweiten schritt alle ergebnisse mit php's levensthein-function sortiert und entsprechend ausgegeben bzw. weiter verarbeitet...
 
Sorry das ich mich erst jetzt wieder melde, ich war unterwegs.

@Gumbo: Danke für den Link. Werde mal schauen ob ich damit weiterkomme.

Ansonsten muss ich es wohl so machen wie Divi vorgeschlagen hat.

Die Soundex Funktion ist meiner Meinung nach nicht wirklich geeignet um "Schreibfehler" zu finden. Habe damit schon vorher einiges probiert aber nie ein wirklich gutes Ergebniss bekommen.

Levenshtein dagegen ist klasse.

Danke Euch für die Antworten

Thomas
 
deswegen hab ich ja wie gesagt soundex auch nur zur vorauswahl verwendet und die richtige selektierung bzw. sortierung danach in php mit levenshtein gemacht... du kannst ja auch noch nachträglich einträge verwerfen, lädst so aber in jedem fall weniger aus der datenbank, was bei nem gewissen tabellenumfang (bei mir warens damals 75k einträge) schon nen unterschied macht.

die soundex-funktion allein ist nicht wirklich geeignet um schreibfehler zu finden, da stimm ich dir zu ;-)
 
Zurück