Найти полный путь к файлу в файловой системе

У меня есть такая файловая система:

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, Может быть не самый эффективный запрос.

Другие вопросы по тегам