我有以下测试字符串engine/mail/key和一个如下所示的表:
+-------------+
| query |
+-------------+
| engine |
| engine/pdf |
| engine/mail |
+-------------+
Run Code Online (Sandbox Code Playgroud)
我想找到最匹配的行.最佳匹配由字符串/行开头的最匹配字符指定.
我已经构建了一个RegExp,但它当然匹配所有行,并且不会给我任何与大多数字符/部分相匹配的信息.
正则表达式:^engine(/mail(/key)?)?
关于使用MySQL的FIND_IN_SET函数,我有另一个想法:
`FIND_IN_SET(query,'engine,engine/mail,engine/mail/key')`
Run Code Online (Sandbox Code Playgroud)
并通过它的输出来排序结果.
这可行,但它绝不是一个很好的解决方案.有没有人对此有更好的了解?
只是使用LIKE,但另一种方式是你可能习惯的.
select query
from table1
where 'engine/mail/key' like concat(query,'%')
order by length(query) desc
limit 1
Run Code Online (Sandbox Code Playgroud)
结果:
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)
Run Code Online (Sandbox Code Playgroud)