Anda dapat menggunakan fungsi string, seperti:
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;
Ini memberi Anda semua entri yang berisi @search. Pertama yang memilikinya di awal, kemudian yang memilikinya setelah dikosongkan, lalu berdasarkan posisi kemunculannya, lalu abjad.
name like concat(@search, '%') desc
menggunakan logika boolean MySQL. 1 =true, 0 =false, jadi pengurutan ini akan menghasilkan true terlebih dahulu.
SQL fiddle:http://sqlfiddle.com/#!9/c6321a/1