Bạn có thể sử dụng các hàm chuỗi, chẳng hạn như:
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;
Điều này giúp bạn có được tất cả các mục có chứa @search. Đầu tiên là những cái có nó ở đầu, sau đó là những cái có nó sau chỗ trống, sau đó theo vị trí của lần xuất hiện, rồi theo thứ tự bảng chữ cái.
name like concat(@search, '%') desc
nhân tiện sử dụng logic boolean của MySQL. 1 =true, 0 =false, vì vậy thứ tự giảm dần này sẽ cho bạn true trước.
SQL fiddle: http://sqlfiddle.com/#!9/c6321a/1