Maison > base de données > tutoriel mysql > Comment puis-je classer les résultats de recherche MySQL par « meilleure correspondance » ?

Comment puis-je classer les résultats de recherche MySQL par « meilleure correspondance » ?

Barbara Streisand
Libérer: 2024-12-28 15:21:14
original
217 Les gens l'ont consulté

How Can I Order MySQL Search Results by

Classement des résultats MySQL par "Meilleure correspondance"

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 :

Classement des correspondances par position de départ

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
Copier après la connexion

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).

Classement des correspondances par position

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)
Copier après la connexion

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.

Briser les égalités

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
Copier après la connexion

Le L'espace réservé peut être remplacé par tout critère supplémentaire utilisé pour le classement, tel que la longueur des mots, l'ordre alphabétique ou une métrique personnalisée.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal