Classement des résultats MySQL par pertinence : meilleure correspondance en premier
Dans une base de données MySQL, la fonctionnalité de recherche en direct implique souvent de trier les résultats en fonction de leur pertinence. Par défaut, les résultats sont classés par ordre alphabétique, mais que se passe-t-il si nous voulons donner la priorité aux résultats dont la chaîne de recherche correspond au début du mot ?
Pour y parvenir, nous pouvons utiliser l'instruction CASE et la correspondance de modèles pour créer un fichier personnalisé. order :
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY CASE WHEN word LIKE 'searchstring%' THEN 1 WHEN word LIKE '%searchstring' THEN 3 ELSE 2 END
Cette requête attribue une priorité de 1 aux résultats où la chaîne de recherche apparaît au début du mot, de 3 à ceux où la chaîne correspond à l'intérieur du mot et de 2 au reste correspondances.
Alternativement, pour trier en fonction de la position de la chaîne correspondante, nous pouvons utiliser la fonction LOCATE :
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
Cette requête trie les résultats en fonction de la position de la chaîne de recherche dans le mot, en donnant la priorité aux correspondances trouvées plus tôt dans le mot.
Enfin, en cas d'égalité où plusieurs mots correspondent à la chaîne de recherche, nous pouvons ajouter une règle de tri secondaire pour classer par ordre alphabétique les résultats au sein de chaque groupe prioritaire :
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
En effectuant un classement personnalisé basé sur la position de la chaîne de recherche, nous pouvons améliorer la pertinence des résultats de recherche et améliorer l'expérience utilisateur.
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!