如何在类别树中选择父母、兄弟姐妹和子女



有一个类别层次结构看起来是这样的:

--Level 1 category 1
  |--Level 2 category 1
     |--Level 3 category 1
     |--Level 3 category 2
     |--Level 3 category 3
  |--Level 2 category 2
     |--Level 3 category 4
     |--Level 3 category 5
     |--Level 3 category 6
--Level 1 category 2
  |--Level 2 category 3
     |--Level 3 category 7

如何检索任何级别的任何特定类别的父母、兄弟姐妹和子女?

例如;级别3类别5";,父母是";级别2类别2";,兄弟姐妹是";级别3类别4";以及";级别3类别6";,没有孩子。对于";级别2类别3";,父母是";级别1类别2";,兄弟姐妹是";级别2类别2";以及";级别2类别1";,一个孩子在";级别3类别7";;

我正在考虑使用WITH RECURSIVE查询,但无法确定如何执行。

您只需要使用递归CTE,因为您想获得树节点的兄弟节点,否则就没有必要了。递归CTE用于生成CCD_ 1值。

以下是查询可能看起来像

WITH RECURSIVE cte AS (
    SELECT
        *,
        0 AS level
    FROM categories
    WHERE parent_id IS NULL
    UNION ALL
    SELECT
        c.*,
        cte.level + 1
    FROM categories c
    JOIN cte ON c.parent_id = cte.id
)
SELECT 
    c.id,
    c.name,
    c.parent_id,
    cc.name AS parent_name,
    GROUP_CONCAT(DISTINCT s.id) AS sinbling_ids,
    GROUP_CONCAT(DISTINCT s.name) AS sibling_names,
    GROUP_CONCAT(DISTINCT ch.id) AS children_ids,
    GROUP_CONCAT(DISTINCT ch.name) AS childrent_names
FROM cte c
LEFT JOIN categories cc ON c.parent_id = cc.id
LEFT JOIN cte s ON c.level = s.level AND s.id != c.id
LEFT JOIN categories ch ON ch.parent_id = c.id
GROUP BY c.id, c.name, c.parent_id, cc.name

你可以查看dbfiddle

相关内容

  • 没有找到相关文章

最新更新