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

comment implémenter un algorithme de recherche efficace lors de l'utilisation de php et d'une base de données mysql ?

Plusieurs façons de procéder :

Le plus rapide (en termes de performances) est :select * FROM Table where keyword LIKE '%value%' L'astuce dans celui-ci est le placement du % qui est un caractère générique, indiquant soit de rechercher tout ce qui se termine ou commence par cette valeur.

Une fonction plus flexible mais (légèrement) plus lente pourrait être la fonction REGEXP :

Select * FROM Table WHERE keyword REGEXP 'value'

Cela utilise la puissance des expressions régulières, vous pouvez donc être aussi élaboré que vous le souhaitez. Cependant, laisser comme ci-dessus vous donne une sorte de "Google du pauvre", permettant à la recherche d'être des morceaux de champs globaux.

La partie collante intervient si vous essayez de rechercher des noms. Par exemple, l'un ou l'autre trouverait le nom "smith" si vous recherchiez SMI. Cependant, aucun des deux ne trouverait "Jon Smith" s'il y avait un champ de prénom et de nom séparé. Donc, vous devrez faire une concaténation pour que la recherche trouve soit Jon OU Smith OU Jon Smith OU Smith, Jon. Cela peut vraiment faire boule de neige à partir de là.

Bien sûr, si vous effectuez une sorte de recherche avancée, vous devrez conditionner votre requête en conséquence. Ainsi, par exemple, si vous souhaitez rechercher la première, la dernière adresse, votre requête devra tester pour chacune :

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