sql >> Databasteknik >  >> RDS >> Mysql

Hur gör jag en otydlig matchning av företagsnamn i MYSQL med PHP för automatisk komplettering?

Du kan börja med att använda SOUNDEX() , detta kommer förmodligen att räcka till vad du behöver (jag ser en ruta med automatiska förslag med redan existerande alternativ för vad användaren skriver).

Nackdelarna med SOUNDEX() är:

  • dess oförmåga att särskilja längre strängar. Endast de första tecknen tas med i beräkningen, längre strängar som divergerar i slutet genererar samma SOUNDEX-värde
  • det faktum att den första bokstaven måste vara densamma annars hittar du inte en matchning lätt. SQL Server har DIFFERENCE()-funktionen för att berätta hur mycket två SOUNDEX-värden skiljer sig åt, men jag tror att MySQL inte har något sådant inbyggt.
  • för MySQL, åtminstone enligt den dokument , SOUNDEX är trasigt för unicode-ingång

Exempel:

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

/* all of these return 'M262' */

För mer avancerade behov tror jag att du måste titta på Levenshtein-avståndet (även kallat "redigera avstånd") av två strängar och arbeta med en tröskel. Detta är den mer komplexa (=långsammare) lösningen, men den möjliggör större flexibilitet.

Den största nackdelen är att du behöver båda strängarna för att beräkna avståndet mellan dem. Med SOUNDEX kan du lagra ett förberäknat SOUNDEX i din tabell och jämföra/sortera/gruppera/filtrera på det. Med Levenshtein-distansen kanske du upptäcker att skillnaden mellan "Microsoft" och "Nzcrosoft" bara är 2, men det kommer att ta mycket mer tid att komma till det resultatet.

I vilket fall som helst kan ett exempel på Levenshtein-distansfunktion för MySQL hittas på codejanitor.com:Levenshtein Distance som en MySQL-lagrad funktion (10 februari 2007) .



  1. Oracle:PÅ DUBLIKAT UPPDATERING AV NYCKEL

  2. Hur man genererar ett slumpmässigt heltal inom ett intervall i MariaDB

  3. Huawei GaussDB

  4. utföra datetime-relaterade operationer i PHP