在MySQL(InnoDB)中找到最匹配的行

时间:2010-03-02 14:40:15

标签: regex mysql

我有以下测试字符串engine/mail/key和一个如下所示的表:

+-------------+
| query       |
+-------------+
| engine      |
| engine/pdf  |
| engine/mail |
+-------------+

我想找到最匹配的行。最佳匹配由字符串/行开头的最匹配字符指定。

我已经构建了一个RegExp,但它当然匹配所有行,并且不会给我任何与大多数字符/部分匹配的信息。
正则表达式:^engine(/mail(/key)?)?

我对使用MySQL的FIND_IN_SET函数有另一个想法:

`FIND_IN_SET(query,'engine,engine/mail,engine/mail/key')`

按顺序输出结果。

这样可行,但它绝不是一个很好的解决方案。有没有人对此有更好的了解?

1 个答案:

答案 0 :(得分:9)

只需使用LIKE,但另一种方式是你可能习惯的。

select query
from table1
where 'engine/mail/key' like concat(query,'%')
order by length(query) desc
limit 1

结果:

mysql> select * from query;
+-------------+
| query       |
+-------------+
| engine      | 
| engine/pdf  | 
| engine/mail | 
+-------------+
3 rows in set (0.00 sec)

mysql> select query from query 
       where 'engine/mail/key' like concat(query,'%') 
       order by length(query) desc 
       limit 1;
+-------------+
| query       |
+-------------+
| engine/mail | 
+-------------+
1 row in set (0.01 sec)