Résultats de recherche MySQL classés par pertinence
Question :
Optimiser une requête de recherche dans MySQL pour donner la priorité aux résultats où la chaîne de recherche apparaît plus près du début du mot, ce qui permet d'obtenir une « meilleure correspondance » plus conviviale tri.
Discussion :
La requête initiale, SELECT word FROM mots WHERE word LIKE '%searchstring%' ORDER BY word ASC, trie les résultats par ordre alphabétique sans aucune préférence pour le placement de la chaîne de recherche dans le mot. Pour résoudre ce problème, nous pouvons utiliser l'instruction CASE de MySQL pour la première méthode de tri et la fonction LOCATE pour la seconde.
Solution :
Première méthode de tri (début, milieu, fin de mot) :
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 -- Starts with search string WHEN word LIKE '%searchstring' THEN 3 -- Includes search string ELSE 2 -- Does not include search string END
Deuxième méthode de tri (position de chaîne correspondante) :
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
Brise d'égalité (facultatif) :
Pour affiner davantage l'ordre dans les scénarios dans lesquels plusieurs mots partagent une position au sein le mot, un champ de tri secondaire peut être ajouté en utilisant le mot lui-même :
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word), word
Conclusion :
En employant ces techniques, les résultats de recherche peuvent être classés par pertinence, avec une préférence pour les correspondances qui apparaissent plus près du début de le mot. Cela offre une expérience utilisateur plus intuitive et améliore la précision de la fonctionnalité de recherche.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!