2017-01-22 63 views
0

我有一個包含多個不同文件URL的列表,我想創建一個類似於結構,文件夾和文件類型的目錄。sql-創建一個類似於鏈接結構的目錄

文件夾,然後再文件

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/在查詢中輸入http://abcd.com/efgh/當它應該產生

╔════╦═════════════════╗ 
║ ║     ║ 
╠════╬═════════════════╣ 
║ 1 ║ efgh   ║ 
║ 2 ║ jhksdh   ║ 
║ 3 ║ dsfsdh   ║ 
║ 4 ║ lmn.txt   ║ 
╚════╩═════════════════╝ 

它應該產生

╔════╦═════════════════╗ 
║ ║     ║ 
╠════╬═════════════════╣ 
║ 1 ║ abc    ║ 
║ 2 ║ hhg.txt   ║ 
╚════╩═════════════════╝ 

我可以不會彌補一個使用SUBSTRING_INDEX()字符串函數查詢

+0

爲什麼你需要正則表達式?你想在URL被解僱時獲得所有這些結果嗎? – learner

+0

子字符串也可以工作@learner – Azhar

回答

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, '/%'); 
+0

它沒有作爲單獨的行的所有級別,它包含所有直接鏈接 – Azhar

+1

@Azhar。 。 。我編輯了答案。 –

+0

我應該使用哪一個?錯誤即將發生在所有這些錯誤中 – Azhar

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; 
相關問題