2016-05-14 1 views
1

J'ai un système de fichiers comme celui-ci:Trouver le chemin complet d'un fichier dans un système de fichiers

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

Chaque fichier ou le répertoire a un id et id de son parent. Maintenant donné un nom de fichier ou un nom de répertoire, comment trouvez-vous le chemin complet de celui-ci?

Mon algorithme est:

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

Répondre

1

Vous pouvez utiliser requête récursive pour cela. En supposant une table file avec des colonnes 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 

Cela vous donnera tout le chemin dans path au fichier avec id=3. Peut ne pas être la requête la plus efficace.

+0

Cela fonctionne très bien. Je vous remercie –