我有一个包含许多不同文件URL的列的表,我想创建一个类似于结构,文件夹和文件的目录。
首先是文件夹,然后是文件
links
----------
http://abcd.com/efgh/hhg.txt
http://abcd.com/efgh/abc/bsbs/hsgs.txt
http://abcd.com/lmn.txt
http://abcd.com/jhksdh/khsdh/khd/abc.txt
http://abcd.com/dsfsdh/khsdh/dsfsdf/bsbs.txt
在查询中输入http://abcd.com/
时,它应生成
╔════╦═════════════════╗
║ ║ ║
╠════╬═════════════════╣
║ 1 ║ efgh ║
║ 2 ║ jhksdh ║
║ 3 ║ dsfsdh ║
║ 4 ║ lmn.txt ║
╚════╩═════════════════╝
在查询中输入http://abcd.com/efgh/
时,它应生成
╔════╦═════════════════╗
║ ║ ║
╠════╬═════════════════╣
║ 1 ║ abc ║
║ 2 ║ hhg.txt ║
╚════╩═════════════════╝
我无法使用SUBSTRING_INDEX()字符串函数构成查询
答案 0 :(得分:1)
这足够接近你想要的吗?
select l.*
from links l
where l.link like concat(@link, '/%')
我问,因为通常这样的表经常(正确?)将所有级别都作为单独的行。因此,links
会有以下行:
http://abcd.com/efgh/abc/bsbs/hsgs.txt
http://abcd.com/efgh/abc/bsbs
http://abcd.com/efgh/abc
http://abcd.com/efgh
http://abcd.com
http://
然后以下查询执行您想要的操作:
select l.*
from links l
where l.link like concat(@link, '/%') and
l.link not like concat(@link, '/%/%');
在不更改数据的情况下,这通常可以正常工作:
select concat(@link, '/',
substring_index(substring(@link, length(@link) + 1
),
'/', 1
)
)
from links l
where l.link like concat(@link, '/%');
答案 1 :(得分:0)
试试这个
set @param = 'http://abcd.com/efgh/';
select
distinct SUBSTRING_INDEX(REPLACE(link, @param, ''), '/', 1) as link
from links
where POSITION(@param IN link) > 0;