毕设通 2023-03-03 20:35 采纳率: 25%
浏览 113
已结题

mysql实现父子节点查询

我想取得的结果是通过父级id,能找到下级或者下下级子节点组

img

img

希望知道的兄弟帮忙解答下,理下思路,如果解决,一定红包打赏 希望给出的答案是mysql5.7以下版本呢,高版本支持不了

  • 写回答

7条回答 默认 最新

  • dahe0825 2023-03-03 20:45
    关注

    参考chatGPT的内容和自己的思路,可以使用递归CTE(Common Table Expressions)来实现父子节点查询。以下是一个使用递归CTE的例子:

    假设有一个表category,其中有id和parent_id两个字段,用于表示父子关系。我们可以使用以下查询语句来获取指定父级id下的所有子节点:

    WITH RECURSIVE category_tree AS (
        SELECT id, parent_id
        FROM category
        WHERE parent_id = :parent_id  -- :parent_id 是要查询的父级id
        UNION ALL
        SELECT c.id, c.parent_id
        FROM category c
        JOIN category_tree ct ON c.parent_id = ct.id
    )
    SELECT id
    FROM category_tree;
    

    这个查询语句中,我们使用了一个递归CTE,首先从表中选择指定的父级id所对应的记录,然后通过UNION ALL连接另一个递归查询,这个递归查询通过JOIN连接自身和category表,来获取更深层次的子节点,直到没有更多的子节点。

    这个查询语句将返回指定父级id下的所有子节点的id。如果您需要获取下级或者下下级子节点组,可以将递归查询的深度加深,比如添加一个额外的递归查询:

    WITH RECURSIVE category_tree AS (
        SELECT id, parent_id
        FROM category
        WHERE parent_id = :parent_id  -- :parent_id 是要查询的父级id
        UNION ALL
        SELECT c.id, c.parent_id
        FROM category c
        JOIN category_tree ct ON c.parent_id = ct.id
    )
    SELECT id
    FROM category_tree
    UNION
    SELECT id
    FROM category
    WHERE parent_id IN (SELECT id FROM category_tree);
    
    
    

    这个查询语句将返回指定父级id下的所有子节点和下级子节点的id。如果您需要获取更深层次的子节点,可以添加更多的递归查询。
    回答不易,还请采纳!!!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月8日
  • 修改了问题 3月3日
  • 创建了问题 3月3日