Du kan använda strängfunktioner, såsom:
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;
Detta ger dig alla poster som innehåller @search. Först de som har det i början, sedan de som har det efter ett tomrum, sedan efter platsen för förekomsten, sedan alfabetiskt.
name like concat(@search, '%') desc
använder förresten MySQL:s booleska logik. 1 =sant, 0 =falskt, så att sortera detta fallande ger dig sant först.
SQL-fiol:http://sqlfiddle.com/#!9/c6321a/1