U kunt tekenreeksfuncties gebruiken, zoals:
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;
Hiermee krijgt u alle vermeldingen die @search bevatten. Eerst degenen die het aan het begin hebben, dan degenen die het na een spatie hebben, dan door de positie van het voorkomen, dan alfabetisch.
name like concat(@search, '%') desc
gebruikt trouwens de booleaanse logica van MySQL. 1 =waar, 0 =onwaar, dus als u deze aflopende volgorde bestelt, krijgt u eerst waar.
SQL-viool:http://sqlfiddle.com/#!9/c6321a/1