mysql实现父子节点查询

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

img

img

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

参考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。如果您需要获取更深层次的子节点,可以添加更多的递归查询。
回答不易,还请采纳!!!

表里加一个字段,这个平台所有上级代码链路存进来,最后根据左like可以获取他的所有下级

可以使用递归查询来实现查找某个节点的所有子节点,可以使用MySQL的WITH RECURSIVE语法。具体操作步骤如下:

创建一个临时表,作为递归查询的起始点,该表中包含待查找的节点的id和parent_id。
使用WITH RECURSIVE语法进行递归查询,查询当前节点的所有直接子节点,并将结果与递归查询下一级节点的结果进行联合查询。
当递归查询到最底层节点时,停止递归。
下面是一个示例代码:

WITH RECURSIVE sub_nodes(id, parent_id) AS (
  SELECT id, parent_id FROM table WHERE id = <待查找的节点ID>
  UNION ALL
  SELECT t.id, t.parent_id FROM table t
  JOIN sub_nodes sn ON t.parent_id = sn.id
)
SELECT * FROM sub_nodes;

pzzhao的回答就是生产上面最常见的实践,多理解理解

mysql查询父/子节点
写的比较详细,可以看看
https://blog.csdn.net/weixin_49319251/article/details/118381475

sql语句递归可以实现,不过不建议这么做,考虑到性能问题,最好只查询下一级即可,就好比多级菜单一样,先查询下一级,然后再次点击继续查询

老铁 看到你截图的mapper,忙猜是mybatis, 写sql比较麻烦, 可以直接用mybatis的特性, 如果数据量太大,层级太深的话,也不太建议使用
以下代码是你 截图的简写,其他无关字段自己添加

1:配置实体类

public class Platform{
  private Integer platformId,
  private Integer parentId,
  /** 之类集合*/
  private List<Platform> children,
}

2:配置 ResultMap

<resultMap id="TreeResultMap" type="实体类" extends="BaseResultMap">
    <collection property="children" javaType="java.util.List" ofType="实体类"
        select="queryTree" column="{parentId=platform_id}" >
    </collection>
</resultMap>

3: 编写sql queryTree

<select id="queryTree" resultMap="TreeResultMap">
    select
        platform_id,parent_id
    from basic_platform
  <where>
     parent_id =#{parentId}
  </where>

</select>

初始查询参数 parentId 可设置为第一级的 0 值
查询结果 就是你想要的带层级的所有树状数据