Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL - Comment obtenir des résultats de recherche avec une pertinence précise

Vous pouvez utiliser des fonctions de chaîne, telles que :

select id, name
from subjects
where name like concat('%', @search, '%')
order by 
  name like concat(@search, '%') desc,
  ifnull(nullif(instr(name, concat(' ', @search)), 0), 99999),
  ifnull(nullif(instr(name, @search), 0), 99999),
  name;

Cela vous permet d'obtenir toutes les entrées contenant @search. D'abord ceux qui l'ont au début, puis ceux qui l'ont après un blanc, puis par la position de l'occurrence, puis par ordre alphabétique.

name like concat(@search, '%') desc utilise la logique booléenne de MySQL. 1 =vrai, 0 =faux, donc l'ordre décroissant vous donne vrai en premier.

Violon SQL :http://sqlfiddle.com/#!9/c6321a/1