2010-10-20 12 views
7

Gibt es eine Möglichkeit, MySQL zu sortieren, indem man sagt, wie nahe es einem Suchbegriff ist?Sortieren nach Soundex (oder ähnlich) `Nähe`

Ich versuche Felder zu bestellen, die Benutzereingaben von Städtenamen enthalten. Variationen und Rechtschreibfehler existieren, und ich möchte die "nächsten" Übereinstimmungen an der Spitze zeigen.

Ich weiß, dass Soundex möglicherweise nicht der beste Algorithmus dafür ist, aber wenn es (oder eine andere Methode) vernünftig erfolgreich sein könnte - könnte es sich lohnen, die Sortierung von der Datenbank durchführen zu lassen.

Antwort

4

Soundex ist nicht gut für diese Art von Sache, weil verschiedene Wörter Ihnen die gleichen Soundex-Ergebnisse geben können und daher willkürlich sortieren. Eine bessere Lösung dafür ist der Levenshein Edit Distance-Algorithmus, den Sie möglicherweise als Funktion in Ihrer Datenbank implementieren können: Link zu Levensheint impl. as MySql stored function !!!

Sie können auch diese SO link überprüfen. Es enthält eine Sql-Server (T-SQL-spezifische) Implementierung des Algorithmus, aber es sollte möglich sein, zu portieren. Die Mechanik des Algorithmus ist relativ einfach und benötigt nur ein 2D-Array und eine Schleife über die Kette.

+0

Ich schaute Levenshtein, wenn ich die Sortierung im Code tun musste. Es scheint so, als würde es sich bei der Implementierung des * korrekten * Algorithmus in der Datenbank oder bei der Verwendung des gleichen Algorithmus, der auf der Code-Seite der Dinge bereits verfügbar ist, wägen. –

+0

Wenn Sie es als eine MySql-Funktion (Link in Antwort) implementieren, dann sollten Sie in der Lage sein, es in Ihrem SQL zu tun. Etwas wie: SELECT CityName, Leven (CityName, compString) VON Stadt ORDER BY Leven (CityName, compString) –

+0

@Rinzler: Ja, dieser Beitrag ist fast zwei Jahre alt. Links verschwinden. Auf jeden Fall habe ich ein weiteres Beispiel einer MySql-Implementierung gefunden und neu verknüpft. –