Mysql
 sql >> Database >  >> RDS >> Mysql

PHP/MySQL:evidenzia i risultati della query SOUNDS LIKE

Nota che SOUNDS LIKE non funziona come pensi. Non è equivalente a LIKE in MySQL, poiché non supporta il % carattere jolly.

Ciò significa che la tua query non troverà "John David" durante la ricerca di "John". Potrebbe essere accettabile se questo è solo il tuo ripiego, ma non è l'ideale.

Quindi ecco un suggerimento diverso (che potrebbe aver bisogno di miglioramenti); prima usa i PHP soundex() funzione per trovare il soundex della parola chiave che stai cercando.

$soundex = soundex($word);
$soundexPrefix = substr($soundex, 0, 2); // first two characters of soundex
$sql = "SELECT lastname, firstname ".
    "FROM table WHERE SOUNDEX(lastname) LIKE '$soundexPrefix%' ".
    "OR SOUNDEX(firstname) LIKE '$soundexPrefix%'";

Ora avrai un elenco di nomi e cognomi che ha una vaga somiglianza nel suono (potrebbero essere molte voci e potresti voler aumentare la lunghezza del prefisso soundex che usi per la tua ricerca). Puoi quindi calcolare la distanza di Levenshtein tra il soundex di ogni parola e il termine di ricerca e ordinare in base a quello.

In secondo luogo, dovresti esaminare le query parametrizzate in MySQL, per evitare bug di SQL injection.