Możesz użyć funkcji ciągów, takich jak:
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;
Dzięki temu otrzymasz wszystkie wpisy zawierające @search. Najpierw te, które mają go na początku, potem te, które mają go po spacji, potem według pozycji wystąpienia, a następnie alfabetycznie.
name like concat(@search, '%') desc
nawiasem mówiąc, używa logiki logicznej MySQL. 1 =prawda, 0 =fałsz, więc uporządkowanie malejąco daje najpierw prawdę.
Skrzypce SQL:http://sqlfiddle.com/#!9/c6321a/1