目前我正在开发一个应用程序,它必须在数据库中存储文件层次结构(不区分文件夹和文件)。为此创建了下表:
tbl_files
----------------------------------
| id | name | parent |
----------------------------------
Run Code Online (Sandbox Code Playgroud)
父字段对tbl_files自身来说是外来的。主目录具有 id root。我现在想获取文件的路径,直到到达根目录。我想用递归 SQL 查询来做到这一点,但我不知道如何从数据库“返回”路径。
递归查询是好的还是不好的做法?我应该如何使用此查询“生成”路径?
要获取路径条目,请使用递归 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)