sql-从链接创建类似结构的目录

时间:2017-01-22 13:39:04

标签: mysql sql url substring concatenation

我有一个包含许多不同文件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()字符串函数构成查询

2 个答案:

答案 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;