Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP/MySQL :Mettez en surbrillance les résultats de la requête SOUNDS LIKE

Notez que SOUNDS LIKE ne fonctionne pas comme vous le pensez. Ce n'est pas équivalent à LIKE dans MySQL, car il ne supporte pas le % caractère générique.

Cela signifie que votre requête ne trouvera pas "John David" lors de la recherche de "John". Cela peut être acceptable s'il ne s'agit que de votre solution de rechange, mais ce n'est pas idéal.

Voici donc une suggestion différente (qui pourrait nécessiter une amélioration); utilisez d'abord PHPs soundex() fonction pour trouver le soundex du mot-clé que vous recherchez.

$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%'";

Vous aurez maintenant une liste de prénoms et de noms de famille qui ont une vague similitude de son (cela peut être beaucoup d'entrées, et vous voudrez peut-être augmenter la longueur du préfixe soundex que vous utilisez pour votre recherche). Vous pouvez ensuite calculer la distance de Levenshtein entre le soundex de chaque mot et votre terme de recherche, et trier en fonction de cela.

Deuxièmement, vous devriez examiner les requêtes paramétrées dans MySQL, pour éviter les bogues d'injection SQL.