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

标签 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;

最佳答案

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

关于MySQL:选择搜索字符串中出现的最长字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38942806/

相关文章:

MySQL:仅在满足条件时更新字段

mysql - 我有两个表,其中包含与 UserID 相同的列。如何通过子查询获取所有行

c# - 具有多个条件的数据表选择

mysql - 对于mySQL触发器,需要将字段值设置为所选值

php - 在 MySQL 插入上使用 multipart/form-data 的奇怪行为

MySQL 大量磁盘事件,即使没有运行查询

ios - 抓取字符串中的特定行 - Swift

java - 无法对基本类型 int 调用 equals(String)

c++ - 使用 al_ustr_newf 复制字符串 Allegro 5

python - 为什么当套接字变得可读时,10 个选择过程中只有 2 个被通知?