MySQL:选择搜索字符串中出现的最长字符串

时间:2016-08-14 13:41:25

标签: mysql string select wildcard

我有一张这样的表:

id    path
1     /
2     /city/
3     /city/europe/
4     /city/north america/
6     /city/europe/germany/berlin/
7     /city/europe/germany/
8     /city/north america/usa/
[...]

和这样的搜索字符串:

"/city/north america/usa/florida/miami/"


我需要选择搜索字符串中最长的路径,结果是

id   path
8    /city/north america/usa/


表中任何路径的每个父级都存在。路径可以任意长。搜索字符串至少包含“/".

我可以想到一些解决方案,例如在列上使用通配符,拆分搜索字符串以及使用IN或连接执行选择。

最好和最快的方法是什么?
该表可以以任何方式进行修改。


编辑: 迄今为止我提出的最快解决方案:

SELECT * FROM table_name
WHERE path IN ('/','/city/','/city/north america/', '/city/north  america/usa/', '/city/north america/usa/florida/', '/city/north america/usa/florida/miami/')
ORDER by LENGTH(path) DESC LIMIT 1;

2 个答案:

答案 0 :(得分:0)

SELECT * 
FROM table_name 
WHERE path REGEXP '^/city((((/north america)?/usa)?/florida)?/miami)?\/?$'
ORDER BY LENGTH(path) DESC
LIMIT 1

答案 1 :(得分:0)

或者,试试这个:

select * FROM tbl WHERE path=
( select max(path) from tbl 
  where '/city/north america/usa/florida/miami/' like concat(path,'%')
)

(编辑) 那么也许这会更快:

select * from tbl where instr('/city/north america/usa/florida/miami/',path)=1 
order by path desc limit 1