Mysql使用通配符搜索多个单词,并按匹配的单词数排序

时间:2015-02-13 15:51:18

标签: mysql regex sql-like

我有一个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才能执行。

感谢

1 个答案:

答案 0 :(得分:2)

您可以通过以下方式按匹配子字符串的顺序排序:

order by ((test like '%sub1%') +
          (text like '%sub2%') +
          (text like '%sub3%')) desc

在整数上下文中,MySQL将布尔值视为整数,其中1表示true,0表示false。所以这会计算匹配数量。