Sie könnten Zeichenfolgenfunktionen verwenden, wie zum Beispiel:
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;
Dadurch erhalten Sie alle Einträge, die @search enthalten. Zuerst diejenigen, die es am Anfang haben, dann diejenigen, die es nach einem Leerzeichen haben, dann nach der Position des Vorkommens, dann alphabetisch.
name like concat(@search, '%') desc
verwendet übrigens die boolesche Logik von MySQL. 1 =wahr, 0 =falsch, wenn Sie also absteigend ordnen, erhalten Sie zuerst wahr.
SQL-Fiddle:http://sqlfiddle.com/#!9/c6321a/1