您的数据如下所示
ferrari motor
motor
tata motor
motor corp
hundai motor
所以当我使用这个查询时
SELECT * FROM `table` WHERE MATCH(`name`) AGAINST ('%motor' IN BOOLEAN MODE) LIMIT 10
我按照下面的随机顺序得到结果
tata motor
motor corp
ferrari motor
motor
hundai motor
但是如果电机是开头的话,我想对它进行排序它应该优先考虑,所以我的预期结果应该如下所示
motor
motor corp
tata motor
ferrari motor
hundai motor
P.S:如果Full text
无法使用LIKE
,也欢迎使用{{1}}回答,这也应该支持多个单词。
答案 0 :(得分:3)
一个非常简单的解决方案是按搜索字符串的位置排序:
SELECT *
FROM `table`
WHERE MATCH(`name`) AGAINST ('%motor' IN BOOLEAN MODE)
ORDER BY INSTR(UPPER(`name`), UPPER('motor'))
LIMIT 10
这会给你
motor motor corp tata motor hundai Motor ferrari motor
或
motor corp motor tata motor hundai Motor ferrari motor
如果您需要'motor'来到'motor corp'之前,那么添加另一个标准,如
ORDER BY INSTR(UPPER(`name`), UPPER('motor')), LENGTH(`name`)
答案 1 :(得分:0)
逐个使用特定优先次序。
SELECT * FROM view_sample
WHERE ...
ORDER BY
CASE
WHEN name LIKE 'motor%' THEN 2
WHEN name LIKE '%motor%' THEN 1
ELSE 0 END,
name
按名称排序
在您的情况下,订购将是:
motor
motor corp
ferrari motor
hundai motor
tata motor
答案 2 :(得分:0)
你可以使用一个联合,它首先用马达%选择结果,然后选择其他结果。
(select 1, name
from carcomp
where name like 'motor%')
union
(select 2, name
from carcomp
where name like '%motor%'
and not like 'motor%')
order by 1,2
答案 3 :(得分:-1)
不确定MySQL语法,但是类似于:
ORDER BY case when SUBSTRING(columnname,1,5) = 'motor' then 0 else 1 end
答案 4 :(得分:-1)
您可以使用instr()
或locate()
按字母组中显示'motor'
的位置来排序结果。
order by (name = 'motor') desc, instr(name, 'motor')
第一个句子首先放置完全匹配。
在您的情况下,订购将是:
motor
motor corp
tata motor
hundai motor
ferrari motor