2016-05-14 2 views
1

У меня есть файл системы, как это:Найти полный путь к файлу в файловой системе

C Drive - Docements - (empty) 
     - Music - Rock - a.mp3 
       - Jazz - SmoothJazz - b.mp3 
     - Photo - (empty) 
D Drive - (empty) 

Каждый файл или каталог имеет идентификатор и идентификатор его родителя. Теперь, учитывая имя файла или имя каталога, как вы находите полный путь?

Мой алгоритм:

Recursively (
    if (parent id is not null) 
     find parent id in the table 
) 

ответ

1

Вы можете использовать рекурсивный запрос для этого. Предполагая, что таблица file с колоннами id, name, parent:

WITH RECURSIVE t AS 
(SELECT id, name, parent, name as path 
FROM file 
WHERE id=3 
UNION ALL 
SELECT si.id,si.name, 
si.parent, 
si.name || '/' || sp.path as path 
FROM file As si 
INNER JOIN t AS sp 
ON (si.id = sp.parent) 
) 
SELECT * 
FROM t where parent is null 
ORDER BY path 

Это даст вам весь путь в path к файлу с id=3. Возможно, это не самый эффективный запрос.

+0

Это работает точно. спасибо –

Смежные вопросы