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