`

mysql操作树-取得一个节点的所有子节点和取得一节点的所有父节点

阅读更多
看标题就知道我要说些什么,这个是在工作上遇到的问题。在网上查了很多,只找到取得节点下面所有子节点的语句,下面是代码
   DELIMITER $$

DROP FUNCTION IF EXISTS `sose`.`getChildLst`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `getChildLst`(rootId varchar(50)) RETURNS varchar(1000) CHARSET utf8
BEGIN
       DECLARE sTemp VARCHAR(1000);
       DECLARE sTempChd VARCHAR(1000);
    
       SET sTemp = '$';
       SET sTempChd =rootId;
    
       WHILE sTempChd is not null DO
         SET sTemp = concat(sTemp,',',sTempChd);
         SELECT group_concat(node_id) INTO sTempChd FROM bus_dir where node_pid<>node_id and FIND_IN_SET(node_pid,sTempChd)>0;
       END WHILE;
       RETURN sTemp;
     END$$

DELIMITER ;

注意:sose是我数据库的名字,DEFINER=`root`@`localhost`是连接的本地数据库,你们改动下就可以

下面是根据上面的语句稍微改动一下就可以根据节点查询所有父节点了
    DELIMITER $$

DROP FUNCTION IF EXISTS `sose`.`getParentLst`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `getParentLst`(childId varchar(50)) RETURNS varchar(1000) CHARSET utf8
BEGIN
       DECLARE sTemp VARCHAR(1000);
       DECLARE sTempPar VARCHAR(1000);
    
       SET sTemp = '$';
       SET sTempPar =childId;
    
       WHILE sTempPar is not null DO
         SET sTemp = concat(sTemp,',',sTempPar);
         SELECT group_concat(node_pid) INTO sTempPar FROM bus_dir where node_pid<>node_id and FIND_IN_SET(node_id,sTempPar)>0;
       END WHILE;
       RETURN sTemp;
     END$$

DELIMITER ;
select * from bus_dir where FIND_IN_SET(node_id,getParentLst('A01|001|10|3|1')) order by node_id;//用这条语句来使用
分享到:
评论

相关推荐

    删除数据库表中的父节点以及其子节点

    要删除一个父节点及其所有子节点,我们需要进行深度优先搜索(DFS)或广度优先搜索(BFS)。这里我们采用广度优先搜索,因为这种方式可以确保先删除所有的子节点,然后再删除父节点,避免了因删除父节点导致的子节点...

    树父节点递归获取树子节点

    使用这个工具类时,只需要创建一个树结构,然后调用 `TreeUtils.getAllChildren(rootNode)` 即可得到从指定父节点开始的所有子节点。这种方法的时间复杂度是 O(n),其中 n 是树的节点总数,因为每个节点只被访问一次...

    根据子节点查找所有父节点

    总的来说,根据子节点查找所有父节点的问题涉及到对树形结构的理解和遍历。通过使用合适的搜索算法,我们可以有效地从树的任意子节点追踪到根节点,获取所有中间的父节点。在实际开发中,这样的操作对于理解和操作...

    根据子节点的金额向上汇总所有父节点的金额

    标题中的“根据子节点的金额向上汇总所有父节点的金额”是一个典型的树形结构数据处理问题,常见于组织架构、账目统计或者数据库层次结构的数据分析。这个问题涉及到的知识点包括但不限于: 1. **树形结构**:在...

    MySQL实现树状所有子节点查询的方法

    在MySQL中,可以创建一个名为`getChildLst`的存储函数,它接收一个根节点ID作为参数,并返回一个包含所有子节点ID的字符串。这个函数使用了一个`WHILE`循环,每次迭代都将当前节点的子节点ID添加到结果字符串中,...

    数据库-表-树节点读取.rar

    例如,使用MySQL的`WITH RECURSIVE`语句或PostgreSQL的`WITH`语句,可以从根节点开始,遍历整棵树,获取所有子节点的信息。 3. **层次查询**:另一种方法是使用层次查询,如Oracle的`CONNECT BY`或SQL Server的`...

    MySQL递归查询树状表的子节点、父节点具体实现

    它使用了一个临时变量`sChildTemp`来存储当前遍历到的子节点ID,同时`sChildList`用于积累所有子节点ID的字符串。初始时,`sChildTemp`被设置为根节点ID。然后,函数进入一个循环,直到找不到新的子节点为止。在每次...

    使用递归删除树形结构的所有子节点(java和mysql实现)

    使用递归删除树形结构的所有子节点(java和mysql实现) 在树形结构中删除某个父节点时,需要递归删除其所有子节点,以避免遗留冗余数据。下面将为大家介绍使用 Java 和 MySQL 实现递归删除树形结构的所有子节点的...

    mysql递归调用获取树节点(子树).pdf

    在MySQL中,构建和操作树形结构数据是一个常见的需求,特别是在组织层次结构、菜单系统或者类别管理等场景。本PDF文档介绍了一种方法,通过递归调用存储过程来获取树节点及其子树。以下是对相关知识点的详细说明: ...

    B+树生成以及节点插入、删除与查询

    生成时需确保树的平衡性,即所有节点的子节点数量接近于树的阶数。 - 数据被分配到各个节点时,遵循B+树的规则,保证节点内数据有序。 3. **节点插入** - 插入新数据时,首先找到对应的关键字应插入的节点。 - ...

    在java中 遍历mysql中的树形结构

    `getChildNode`函数通过递归方式构建一个包含所有子节点`subCode`的字符串,而`getChildNodeParent`函数则根据给定的`sub_code`查询数据库,返回与之相关的子节点列表。 #### 性能优化 对于大型树形结构,频繁的...

    MySql 中查询树形结构的全部子项列表 Function

    查询树形结构的所有子节点通常涉及到递归操作。MySQL并不直接支持递归查询,但可以通过自连接和临时表来模拟。一种常用的方法是使用层次查询,例如深度优先搜索(DFS)或广度优先搜索(BFS)。 这里我们假设有一个...

    mysql递归调用获取树节点(子树)借鉴.pdf

    在MySQL中,构建和操作树形结构数据是一个常见的需求,特别是在组织层次结构、菜单系统或者文件目录等场景中。在给定的文件中,我们看到了如何通过存储过程来实现递归调用来获取树节点(子树)的方法。下面将详细...

    java生成树型结构

    - **类表示法**:创建一个类来表示树节点,包含数据和子节点的引用列表。 ```java class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } ``` - **链表表示法**:...

    JS + JSP + MYSQL 无限树

    在无限树项目中,可能需要设计一个数据库表来存储节点信息,包括ID、父节点ID、节点名称、是否有子节点等字段。这样的设计可以支持快速查询和构建树结构。例如,可以通过递归查询或者自连接查询来获取任意节点的所有...

    mysql递归调用获取树节点(子树)[参考].pdf

    在MySQL中,构建和操作树形结构数据是常见的需求,特别是在组织层级关系或者导航菜单等场景下。这个文档提到了如何使用存储过程来实现递归调用,以便获取树节点及其子树。以下是对相关知识点的详细说明: 首先,...

    mysql 递归查找菜单节点的所有子节点的方法

    项目中遇到一个需求,要求查处菜单节点的所有节点,在网上查了一下,大多数的方法用到了存储过程,由于线上环境不能随便添加存储过程, 因此在这里采用类似递归的方法对菜单的所有子节点进行查询。 准备 创建menu表...

    预排序遍历树算法的无限级分类-存储过程实现

    @Dir='&gt;&gt;' 把节点@ID1加入到@ID2,并且作为节点@ID2的最后一个子节点 ---------------------------------------- MPTT_NODEGet @Act nvarchar(10), @ID INT=0 ---------------------------------------- 这个存储...

    MySQL的索引-你真的了解了吗

    二叉查找树是一种数据结构,它的特点是左子树所有的节点都小于父节点,右子树所有的节点都大于父节点。但是,二叉查找树存在的问题是它的查找耗时是和这棵树的深度相关的,在最坏的情况下时间复杂度会退化成 O(n)。 ...

Global site tag (gtag.js) - Google Analytics