sql >> Base de Datos >  >> RDS >> Mysql

PHP/MySQL:Resalte SOUNDS LIKE en los resultados de la consulta

Tenga en cuenta que SOUNDS LIKE no funciona como crees que lo hace. No es equivalente a LIKE en MySQL, ya que no soporta el % comodín.

Esto significa que su consulta no encontrará "John David" cuando busque "John". Esto podría ser aceptable si es solo su alternativa, pero no es lo ideal.

Así que aquí hay una sugerencia diferente (que podría necesitar mejoras); primero use PHPs soundex() función para encontrar el soundex de la palabra clave que está buscando.

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

Ahora tendrá una lista de nombres y apellidos que tienen una vaga similitud en el sonido (pueden ser muchas entradas, y es posible que desee aumentar la longitud del prefijo soundex que usa para su búsqueda). A continuación, puede calcular la distancia de Levenshtein entre el soundex de cada palabra y su término de búsqueda, y ordenar por eso.

En segundo lugar, debe buscar consultas parametrizadas en MySQL para evitar errores de inyección de SQL.