SQLite递归查询返回文件路径

Cil*_*nco 5 sql sqlite

目前我正在开发一个应用程序,它必须在数据库中存储文件层次结构(不区分文件夹和文件)。为此创建了下表:

tbl_files
----------------------------------
|   id   |   name   |   parent   |
----------------------------------
Run Code Online (Sandbox Code Playgroud)

父字段对tbl_files自身来说是外来的。主目录具有 id root。我现在想获取文件的路径,直到到达根目录。我想用递归 SQL 查询来做到这一点,但我不知道如何从数据库“返回”路径。

递归查询是好的还是不好的做法?我应该如何使用此查询“生成”路径?

CL.*_*CL. 6

要获取路径条目,请使用递归 CTE。要组合名称,请使用group_concat()

WITH RECURSIVE path(level, name, parent) AS (
    SELECT 0, name, parent
    FROM tbl_files
    WHERE id = @MyFileID
    UNION ALL
    SELECT path.level + 1,
           tbl_files.name,
           tbl_files.parent
    FROM tbl_files
    JOIN path ON tbl_files.id = path.parent
),
path_from_root AS (
    SELECT name
    FROM path
    ORDER BY level DESC
)
SELECT group_concat(name, '/')
FROM path_from_root;
Run Code Online (Sandbox Code Playgroud)