我有一个innodb表'不支持全文',我使用类似的语句搜索
Select text,id from searchTable where text like '%sub1%' or text like '%sub2%' or text like '%sub3%'
group by text,
order by (CASE
when text LIKE 'sub1 %' then 1
when text LIKE 'sub1%' then 2
when text LIKE '% sub1%' then 3
when text LIKE '%sub1%' then 4
else 5
end),id
这会或多或少地按预期返回结果,但我想知道我是否也可以通过匹配的子串数来订购它。例如,首先包含所有3个子串的订单行,然后是匹配3个子串中的2个的行等。
有可能吗?它会影响性能吗?
我的表包含大约50k行,这个当前语句需要大约0.6ms才能执行。
感谢
答案 0 :(得分:2)
您可以通过以下方式按匹配子字符串的顺序排序:
order by ((test like '%sub1%') +
(text like '%sub2%') +
(text like '%sub3%')) desc
在整数上下文中,MySQL将布尔值视为整数,其中1表示true,0表示false。所以这会计算匹配数量。