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

¿Cómo implementar un algoritmo de búsqueda efectivo cuando se usa php y una base de datos mysql?

Un par de maneras diferentes de hacer esto:

El más rápido (en cuanto al rendimiento) es:select * FROM Table where keyword LIKE '%value%' El truco en este es la ubicación del %, que es un comodín, que dice buscar todo lo que termina o comienza con este valor.

Una más flexible pero (ligeramente) más lenta podría ser la función REGEXP:

Select * FROM Table WHERE keyword REGEXP 'value'

Esto es usar el poder de las expresiones regulares, por lo que podría ser tan elaborado como quisiera. Sin embargo, salir como se indica arriba le da una especie de "Google de los pobres", lo que permite que la búsqueda sea parte de los campos generales.

La parte pegajosa aparece si estás tratando de buscar nombres. Por ejemplo, cualquiera encontraría el nombre "smith" si buscara SMI. Sin embargo, ninguno encontraría a "Jon Smith" si hubiera un campo de nombre y apellido separados. Entonces, tendría que hacer alguna concatenación para que la búsqueda encontrara a Jon O Smith O Jon Smith O Smith, Jon. Realmente puede convertirse en una bola de nieve a partir de ahí.

Por supuesto, si está realizando algún tipo de búsqueda avanzada, deberá condicionar su consulta en consecuencia. Entonces, por ejemplo, si quisiera buscar primero, último, dirección, entonces su consulta tendría que probar para cada:

SELECT * FROM table WHERE first LIKE '%value%' OR last LIKE '%value%' OR address LIKE '%value'