11 Vote

MySQL: Trier par Pertinence

Question de Progger99 | 01/05/2021 à 09:13

Je souhaite trier une requête de recherche pour plusieurs mots en fonction de la pertinence, c'est-à-dire: plus mes mots-clés sont inclus dans l'enregistrement, plus haut l'enregistrement doit être affiché, car il a plus de pertinence.

Jusqu'à présent, ma requête MySQL ressemble à ça:

SELECT * FROM tab WHERE
  text LIKE 'mot1' OR
  text LIKE 'mot2' OR
  text LIKE 'mot3'
LIMIT 10 ORDER BY ??

Mais qu'est-ce qui vient après le ORDER BY? J'espère que quelqu'un pourra m'aider. Soit dit en passant, je n'utiliserais pas une recherche en full text!

RépondrePositifNégatif
1Meilleure Réponse1 Vote

Une façon d'implémenter cela sans utiliser une recherche de full text serait de prendre une requête qui ressemble à ceci:

ORDER BY
  CASE WHEN text LIKE 'mot1' THEN 1 ELSE 0 END
+ CASE WHEN text LIKE 'mot2' THEN 1 ELSE 0 END
+ CASE WHEN text LIKE 'mot3' THEN 1 ELSE 0 END
DESC

Ainsi, chaque mot correspondant conduit à une augmentation du rang lors du tri. Si les trois mots apparaissent dans "text", nous obtenons un rang de 3, tandis que le montant avec un seul mot correspondant est 1 et par conséquent, l'enregistrement correspondant apparaît plus en dessous.
02/05/2021 à 20:11

RépondrePositif Négatif
Répondre

Sujets Connexes

MySQL: SELECT 0 au lieu de NULL

Question | 4 Réponses

Avis Important

Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.

Participer

Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.