mysql树形遍历_mysql树形结构遍历
课题:如何利用mysql遍历树形结构(获取一个节点的所有子节点/父节点)
方案:自定义mysql函数
树形表结构:
CREATE TABLE `tbl_tree` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`father_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `father_id` (`father_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
自定义mysql函数函数:
1. 获取节点的子节点
CREATE FUNCTION `getChildLst`(rootId INT)
RETURNS varchar(1000)
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd VARCHAR(1000);
SET sTemp = '';
SET sTempChd =cast(rootId as CHAR);
loop1:LOOP
SELECT group_concat(id) INTO sTempChd FROM tbl_tree where FIND_IN_SET(father_id,sTempChd)>0;
IF sTempChd is not null THEN
SET sTemp = concat(sTemp,',',sTempChd);
ELSE
LEAVE loop1;
END IF;
END LOOP;
SET sTemp = TRIM(',' FROM sTemp);
RETURN sTemp;
END
2. 获取节点的父节点
CREATE FUNCTION `getFatherLst`(rootId INT)
RETURNS varchar(1000)
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempPrt VARCHAR(1000);
SET sTemp = '';
SET sTempPrt = cast(rootId as CHAR);
loop1:LOOP
SELECT group_concat(father_id) INTO sTempPrt FROM tbl_tree where FIND_IN_SET(id,sTempChd)>0;
IF sTempPrt is not null THEN
SET sTemp = concat(sTemp,',',sTempPrt);
ELSE
LEAVE loop1;
END IF;
END LOOP;
SET sTemp = TRIM(',' FROM sTemp);
RETURN sTemp;
END
优化后的查询语句:
1. 获取子节点
select A.* from tbl_tree A inner join (select getChildLst(1) as idArr) TEMP where FIND_IN_SET(A.id, TEMP.idArr);1. 获取父节点
select A.* from tbl_tree A inner join (select getFatherLst(15000) as idArr) TEMP where FIND_IN_SET(A.id, TEMP.idArr);
mysql树形遍历_mysql树形结构遍历相关推荐
- mysql表的遍历_MySQL 全表遍历
今天做一个业务需求的逻辑处理,需要对MySQL全表进行遍历,数据规模百万级别,为方便描述,这张表就用 a 来代替吧 结合自己的思路和一些资料,在这里记录一下方案的进化史 一.直接遍历拿出所有的数据 s ...
- mysql 叶子节点_MySQL 树形结构 根据指定节点获取其所有叶子节点
背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有叶子节点. 叶子节点:如果一个节点下不再有子节点,则为叶子节点. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合 ...
- mysql存储树结构_mysql 树形结构查询(存储过程)
就用数据数据库表地址数据(中国地区) 来说吧(用Windows 请使用 gbk !!) 可直接运行(去除注解) 存储过程: DELIMITER//dropprocedureifexistsfindLC ...
- mysql 游标循环_mysql for循环遍历 游标用处
以前一直不知道游标的作用,之前的结果集遍历 博主一直用的是记录查询出来的记录总数并一条条用LIMIT 1 OFFSET index 进行查找,并进行处理的. 现在终于会使用游标了,献上一个小例子供大家 ...
- matlab根据结构体数组,用邻接矩阵和序遍历创建树形结构:
matlab根据结构体数组,用邻接矩阵和先序遍历创建树形结构: https://blog.csdn.net/C_Redrock/article/details/84980241
- 树形结构:迭代方式遍历树,宽度优先,先序遍历,中序遍历,后序遍历
迭代的方式处理树,就必须清楚你将要访问的顺序,对应的就是指针怎么走,你必须很清楚 树的宽度优先搜索,他是一层一层的访问,就搞不清楚怎么划分子问题了,但是你访问的顺序 你很清楚,那么就使用迭代的方式实现 ...
- elementUI中el-table树形与el-tree树形结构的一键折叠与展开
elementUI中el-table树形与el-tree树形结构的一键折叠与展开 1.业务需求: vue项目,权限菜单管理中菜单table的树形结构,一般情况下如果使用的是elementUI那么可以使 ...
- PHP 数组遍历 foreach 语法结构
来源:http://www.cnblogs.com/keta/p/6117237.html foreach 语法结构用于遍历数组. foreach() PHP foreach() 语法结构用于遍历操作 ...
- 已知二叉树的前序遍历、中序遍历或者中序遍历、后序遍历求二叉树结构的算法
二叉树中的前序遍历是先访问根结点,再访问左子树,右子树. 中序遍历是先访问左子树,再是根结点,最后是右子树. 后序遍历是先访问左子树,再是右子树,最后是根结点. 算法思路是先根据前序遍历的第一个结点或 ...
最新文章
- Transact_SQL小手册
- 传Facebook将推出应用中心挑战谷歌搜索地位
- 假定某一个数据列表是一个班级的计算机课程,若需要利用形参直接访问实参,则应把形参变量说明为()参数。A.指针B.引用C.传值D.常值...
- 银行不告诉的秘密,看完豁然大悟
- 硅谷经历 7 场面试,我是如何最终进入 Facebook 的
- 深入理解Linux系统中的用户和组账号
- 网络运维超融合服务器,15. 通过 Openfiler 软件:配置 ISCSI 和
- ExtJS4.2学习(13)基于表格的扩展插件---rowEditing
- 计算机二级lookup函数,LOOKUP函数用法全解(下)——LOOKUP函数的二分法原理
- java 以2为底的对数_如何计算Java中以整数为底的对数2?
- 女人,百花千红你最美
- JSON Views 基本用法
- python自定义标识符的使用区分大小写吗_Python中的标识符是不区分大小写的
- 阿里云CAC_DevOps课程详细文字文档
- 图解Redis中的9种数据结构(高级面试,必备)
- 【链块技术10期】区块链基础语言(二)——GO语言开发环境搭建
- 视频号该怎么去运营;有人已经利用视频号赚到了第一笔金了丨国仁网络资讯
- android 高德地图移动卡顿_使用高德SDK开发安卓地图应用软件
- npm 包管理及 registry 或 proxy 配置
- php卡片式,卡片式设计的优点和不适用性