`

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;//用这条语句来使用
分享到:
评论

相关推荐

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

    java实现树父节点递归获取树子节点 工具类,以后再项目中直接用即可

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

    代码 博文链接:https://blueskylan.iteye.com/blog/848423

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

    使用存储过程删除数据库表中具有父子关系的数据,删除父节点,则将其父节点以及子节点删除,使用数据库广度遍历

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

    代码 博文链接:https://blueskylan.iteye.com/blog/848447

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

    表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段(对应该记录的父节点,当然,一个父节点自然会有一个以上的子节点嘛) 代码如下: CREATE FUNCTION `getChildList`(rootId INT) ...

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

    下面小编就为大家带来一篇使用递归删除树形结构的所有子节点(java和mysql实现)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

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

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

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

    MySQL多种递归查询方法.docx

    文章主要知识点: Oracle 递归查询, start with connect by prior 用法 find_in_set 函数 concat,concat_ws,group_...第一种情况: start with 子节点id = ' 查询节点 ' connect by prior 子节点id = 父节点id

    2018年全国五级行政区域,共719609,包括子父节点

    2018年全国五级行政区域,共719609,包括子父节点,表结构 CREATE TABLE `aid2018` ( `code` char(12) NOT NULL, `name` varchar(255) DEFAULT NULL, `level` char(12) DEFAULT NULL, `parent` char(12) DEFAULT...

    MySQL通过自定义函数实现递归查询父级ID或者子级ID

    在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度, 那么所有节点为根的树的深度均不会超过树的最大深度,则我们可以直接通过left join来实现。 但很多时候我们是无法控制或者是知道树的深度的...

    易语言程序免安装版下载

    操作系统界面功能支持库(shell.fne)中的“执行()”命令增加一个参数“窗口显示方式”,作用与核心库“运行()”命令的同名参数一致。 6. 数据库操作支持库增加读写长整数字段的功能,但受限于系统接口暂不能读写...

    PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例

    常用的方法有两种: 1. 领接表的方式; 2. 预排序遍历树方式; 假设树状结构如下图: 领接表方式 主要依赖于一个 parent 字段,用于... * 获取父节点下的所有子节点  *  * @since 2011-05-18  *  * @param $par

    mysql实现多表关联统计(子查询统计)示例

    当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用CONCAT_WS函数将多个字段其拼接 实现: 查询代码如下 SELECT b.id, b.book_name, sum( IF ( o.create_time &gt; 0 && o....

    Mysql树形递归查询的实现方法

    主要给大家介绍了关于Mysql树形递归查询的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    spring security 参考手册中文版

    设置一个自定义的AuthenticationEntryPoint 64 6.4方法安全 64 6.4.1 &lt;global-method-security&gt;元素 65 使用protect-pointcut添加安全性切入点 66 6.5默认AccessDecisionManager 67 6.5.1自定义...

    网络数据库应用技术

    网络数据库(Network Database)其含义有三个:①在网络上运行的数据库。...实际上,网络数据库允许两个节点间的多个路径,而分层数据库只能有一个从父记录(高级记录)到子记录(低级目录)的路径。

Global site tag (gtag.js) - Google Analytics