我有以下测试字符串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')`
按顺序输出结果。
这样可行,但它绝不是一个很好的解决方案。有没有人对此有更好的了解?
答案 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)