看标题就知道我要说些什么,这个是在工作上遇到的问题。在网上查了很多,只找到取得节点下面所有子节点的语句,下面是代码
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
表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段(对应该记录的父节点,当然,一个父节点自然会有一个以上的子节点嘛) 代码如下: CREATE FUNCTION `getChildList`(rootId INT) ...
项目中遇到一个需求,要求查处菜单节点的所有节点,在网上查了一下,大多数的方法用到了存储过程,由于线上环境不能随便添加存储过程, 因此在这里采用类似递归的方法对菜单的所有子节点进行查询。 准备 创建menu表...
@Dir='>>' 把节点@ID1加入到@ID2,并且作为节点@ID2的最后一个子节点 ---------------------------------------- MPTT_NODEGet @Act nvarchar(10), @ID INT=0 ---------------------------------------- 这个存储...
文章主要知识点: Oracle 递归查询, start with connect by prior 用法 find_in_set 函数 concat,concat_ws,group_...第一种情况: start with 子节点id = ' 查询节点 ' connect by prior 子节点id = 父节点id
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中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度, 那么所有节点为根的树的深度均不会超过树的最大深度,则我们可以直接通过left join来实现。 但很多时候我们是无法控制或者是知道树的深度的...
操作系统界面功能支持库(shell.fne)中的“执行()”命令增加一个参数“窗口显示方式”,作用与核心库“运行()”命令的同名参数一致。 6. 数据库操作支持库增加读写长整数字段的功能,但受限于系统接口暂不能读写...
MySQL 递归查找菜单节点的所有子节点方法 本文将详细介绍如何使用 MySQL 递归查找菜单节点的所有子节点方法。该方法使用自定义变量和条件语句来实现递归查找菜单节点的所有子节点。 创建menu表 首先,需要创建一...
常用的方法有两种: 1. 领接表的方式; 2. 预排序遍历树方式; 假设树状结构如下图: 领接表方式 主要依赖于一个 parent 字段,用于... * 获取父节点下的所有子节点 * * @since 2011-05-18 * * @param $par
当关联超过两张表时导致统计时数据重复,只好用子查询查出来,子查询只能查一个字段,这里用CONCAT_WS函数将多个字段其拼接 实现: 查询代码如下 SELECT b.id, b.book_name, sum( IF ( o.create_time > 0 && o....
主要给大家介绍了关于Mysql树形递归查询的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
设置一个自定义的AuthenticationEntryPoint 64 6.4方法安全 64 6.4.1 <global-method-security>元素 65 使用protect-pointcut添加安全性切入点 66 6.5默认AccessDecisionManager 67 6.5.1自定义...
网络数据库(Network Database)其含义有三个:①在网络上运行的数据库。...实际上,网络数据库允许两个节点间的多个路径,而分层数据库只能有一个从父记录(高级记录)到子记录(低级目录)的路径。