Lors d'une recherche dans une table de base de données avec une fonction de recherche en direct, il est souvent souhaitable de classer les résultats de manière à donner la priorité aux meilleurs matchs. Par défaut, une requête simple comme celle fournie peut ne pas classer efficacement les résultats en fonction de la position de départ de la chaîne de recherche.
Pour obtenir un classement de « meilleure correspondance » plus précis, envisagez les options suivantes :
Si l'objectif est de trier les résultats avec la chaîne correspondante apparaissant au début comme priorité la plus élevée, la requête peut être modifiée comme suit :
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
Cela donnera la priorité aux correspondances qui commencent par la chaîne de recherche (attribuée à une valeur de 1), suivies des correspondances qui contiennent la chaîne (attribuée à une valeur de 3) et enfin aux correspondances où la chaîne se produit à n'importe quelle autre position (attribuée à une valeur de 2).
Alternativement, si l'objectif est de trier les résultats en fonction sur la position de la chaîne correspondante dans le mot, la requête peut utiliser la fonction LOCATE :
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY LOCATE('searchstring', word)
Cette requête ordonnera les résultats en fonction de l'index de la première occurrence de la chaîne de recherche dans chaque mot.
Dans les scénarios où plusieurs mots correspondent de manière égale aux critères de recherche, il peut être souhaitable d'introduire une condition de départage pour affiner davantage l'ordre. Ceci peut être réalisé en ajoutant une clause ORDER BY supplémentaire :
SELECT word FROM words WHERE word LIKE '%searchstring%' ORDER BY <whatever>, word
Le
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!