Můžete použít řetězcové funkce, jako například:
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;
Tím získáte všechny položky obsahující @search. Nejprve ty, které to mají na začátku, pak ty, které to mají za mezerou, pak podle pozice výskytu, pak podle abecedy.
name like concat(@search, '%') desc
mimochodem používá booleovskou logiku MySQL. 1 =pravda, 0 =nepravda, takže seřazením tohoto sestupného pořadí získáte jako první hodnotu true.
SQL housle:http://sqlfiddle.com/#!9/c6321a/1