You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询folder_table中同ID带linenum序列的文件夹数据?

生成面包屑ParentID数组的实现方法

根据你描述的嵌套文件夹归档系统需求,分两种常见表结构场景给出实现方案:

场景1:表存储独立文件夹节点(每个节点一条记录,通过parent_id关联层级)

如果folder_table中每个文件夹是独立记录,通过parent_id关联父文件夹,linenum表示节点在路径中的顺序编号,可以用递归CTE遍历层级并聚合数组:

WITH RECURSIVE breadcrumb_cte AS (
    -- 起始节点:目标文件夹
    SELECT 
        id, 
        parent_id, 
        linenum,
        ARRAY[parent_id] AS parent_ids
    FROM folder_table
    WHERE id = :target_id -- 替换为目标文件夹ID
    UNION ALL
    -- 递归向上遍历父节点
    SELECT 
        ft.id, 
        ft.parent_id, 
        ft.linenum,
        bc.parent_ids || ft.parent_id
    FROM folder_table ft
    JOIN breadcrumb_cte bc ON ft.id = bc.parent_id
    WHERE ft.parent_id IS NOT NULL
)
-- 按linenum排序聚合最终数组
SELECT 
    array_agg(parent_id ORDER BY linenum) AS breadcrumb_parent_ids
FROM breadcrumb_cte;

场景2:表存储完整路径的所有节点(同一路径节点共用id,linenum为路径顺序)

如果同一文件夹路径的所有层级节点共用同一个id,linenum代表路径中的顺序(从根到子节点递增),直接用聚合函数即可生成数组:

SELECT 
    id,
    array_agg(parent_id ORDER BY linenum) AS breadcrumb_parent_ids
FROM folder_table
WHERE id = :target_id -- 替换为目标ID
GROUP BY id;

补充调整

  • 若需排除根目录的NULL值,可在查询中添加AND parent_id IS NOT NULL条件;
  • 若linenum是倒序(子节点到根目录),只需将ORDER BY linenum改为ORDER BY linenum DESC。

内容的提问来源于stack exchange,提问作者Culascage

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:20:27