Puoi iniziare usando SOUNDEX()
, questo probabilmente farà ciò di cui hai bisogno (immagino una casella di suggerimento automatico di alternative già esistenti per ciò che l'utente sta digitando).
Gli svantaggi di SOUNDEX()
sono:
- la sua incapacità di differenziare stringhe più lunghe. Vengono presi in considerazione solo i primi caratteri, stringhe più lunghe che divergono alla fine generano lo stesso valore SOUNDEX
- il fatto che la prima lettera deve essere la stessa o non troverai facilmente una corrispondenza. SQL Server ha la funzione DIFFERENCE() per dirti quanto due valori SOUNDEX sono separati, ma penso che MySQL non abbia nulla di quel tipo integrato.
- per MySQL, almeno secondo il documenti , SOUNDEX è interrotto per l'input Unicode
Esempio:
SELECT SOUNDEX('Microsoft')
SELECT SOUNDEX('Microsift')
SELECT SOUNDEX('Microsift Corporation')
SELECT SOUNDEX('Microsift Subsidary')
/* all of these return 'M262' */
Per esigenze più avanzate, penso che tu debba dare un'occhiata alla distanza di Levenshtein (chiamato anche "modifica distanza") di due stringhe e lavora con una soglia. Questa è la soluzione più complessa (=più lenta), ma consente una maggiore flessibilità.
Lo svantaggio principale è che sono necessarie entrambe le stringhe per calcolare la distanza tra di loro. Con SOUNDEX puoi memorizzare un SOUNDEX precalcolato nella tua tabella e confrontare/ordinare/raggruppare/filtrare su quello. Con la distanza di Levenshtein, potresti scoprire che la differenza tra "Microsoft" e "Nzcrosoft" è solo 2, ma ci vorrà molto più tempo per arrivare a quel risultato.
In ogni caso, una funzione di distanza Levenshtein di esempio per MySQL può essere trovata su codejanitor.com:Distanza di Levenshtein come funzione memorizzata MySQL (10 febbraio 2007) .