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