Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wykonać rozmyte dopasowanie nazw firm w MYSQL z PHP w celu automatycznego uzupełniania?

Możesz zacząć od użycia SOUNDEX() , prawdopodobnie zrobi to, czego potrzebujesz (wyobrażam sobie pole autosugestii z już istniejącymi alternatywami dla tego, co pisze użytkownik).

Wady SOUNDEX() są:

  • jego niezdolność do rozróżniania dłuższych ciągów. Tylko kilka pierwszych znaków jest branych pod uwagę, dłuższe ciągi, które rozchodzą się na końcu, generują tę samą wartość SOUNDEX
  • fakt, że pierwsza litera musi być taka sama, w przeciwnym razie nie będzie łatwo znaleźć dopasowania. SQL Server ma funkcję DIFFERENCE(), która mówi, jak bardzo różnią się dwie wartości SOUNDEX, ale myślę, że MySQL nie ma nic takiego wbudowanego.
  • dla MySQL, przynajmniej według dokumenty , SOUNDEX jest uszkodzony dla wejścia Unicode

Przykład:

SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')

/* all of these return 'M262' */

W przypadku bardziej zaawansowanych potrzeb myślę, że należy spojrzeć na odległość Levenshtein (zwane także „edycją odległości”) dwóch ciągów i pracy z progiem. Jest to bardziej złożone (=wolniejsze) rozwiązanie, ale zapewnia większą elastyczność.

Główną wadą jest to, że do obliczenia odległości między nimi potrzebne są oba struny. Dzięki SOUNDEX możesz przechowywać wstępnie obliczony SOUNDEX w swojej tabeli i na tej podstawie porównywać/sortować/grupować/filtrować. Z odległością Levenshteina może się okazać, że różnica między „Microsoft” a „Nzcrosoft” wynosi tylko 2, ale osiągnięcie tego wyniku zajmie dużo więcej czasu.

W każdym razie przykładową funkcję odległości Levenshteina dla MySQL można znaleźć pod adresem codejanitor.com:Levenshtein Distance jako funkcja przechowywana w MySQL (10 lutego 2007) .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak ustawić wybraną pozycję w rozwijanym polu?

  2. Zrozumienie statystyk HAProxy dla MySQL i PostgreSQL

  3. Nie można połączyć się z serwerem MySQL na „localhost” (10061)

  4. Przykłady LOCALTIME – MySQL

  5. Jak wyodrębnić n-te słowo i policzyć wystąpienia słów w ciągu MySQL?