2010-10-20 15 views
7

Czy istnieje sposób na uzyskanie wyników w kolejności MySQL przez to, jak blisko" brzmią "do wyszukiwanego hasła?Sortuj według Soundex (lub podobnego) `Closeness`

Próbuję zamówić pola zawierające dane wejściowe użytkownika nazw miast. Istnieją odmiany i błędy ortograficzne. Chciałbym pokazać "najbliższe" mecze u góry.

Wiem, że soundex może nie być najlepszym algorytmem do tego, ale jeśli to (lub inna metoda) może być rozsądnym sukcesem - może warto sortowania zrobić przez bazę danych.

Odpowiedz

4

Soundex nie jest dobry na tego typu rzeczy, ponieważ różne słowa mogą dać takie same wyniki Soundex, a zatem będą sortować dowolnie. Lepszym rozwiązaniem jest algorytm Levenshein Edit Distance i możesz go wdrożyć jako funkcję w bazie danych: Link do Levensheint impl. as MySql stored function !!!

Możesz również sprawdzić to SO link. Zawiera implementację algorytmu Sql (specyficzna dla T-SQL), ale powinno być możliwe portowanie. Mechanika algorytmu jest dość prosta, wymagająca tylko tablicy 2D i pętli nad ciągiem znaków.

+0

Patrzyłem na Levenshteina, gdybym musiał zrobić sortowanie w kodzie. Wygląda na to, że waży implementację * poprawnego * algorytmu w bazie danych lub używając tego samego algorytmu, który jest już dostępny po stronie kodowej. –

+0

Jeśli zaimplementujesz go jako funkcję MySql (link w odpowiedzi), powinieneś być w stanie to zrobić w twoim SQL. Coś jak: SELECT CityName, Leven (CityName, compString) OD miasta ORDER BY Leven (CityName, compString) –

+0

@Rinzler: Tak, ten wpis ma prawie dwa lata. Linki znikają. W każdym razie znalazłem inny przykład implementacji MySql i zrewolucjonowałem się. –