mysql树形结构遍历
来源:互联网 发布:殷保华一线法公式源码 编辑:程序博客网 时间:2024/05/21 21:50
课题:如何利用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)BEGINDECLARE sTemp VARCHAR(1000);DECLARE sTempChd VARCHAR(1000);SET sTemp = '';SET sTempChd =cast(rootId as CHAR);loop1:LOOPSELECT group_concat(id) INTO sTempChd FROM tbl_tree where FIND_IN_SET(father_id,sTempChd)>0;IF sTempChd is not null THENSET sTemp = concat(sTemp,',',sTempChd);ELSELEAVE loop1;END IF;END LOOP;SET sTemp = TRIM(',' FROM sTemp);RETURN sTemp;END
2. 获取节点的父节点
CREATE FUNCTION `getFatherLst`(rootId INT)RETURNS varchar(1000)BEGINDECLARE sTemp VARCHAR(1000);DECLARE sTempPrt VARCHAR(1000);SET sTemp = '';SET sTempPrt = cast(rootId as CHAR);loop1:LOOPSELECT group_concat(father_id) INTO sTempPrt FROM tbl_tree where FIND_IN_SET(id,sTempChd)>0;IF sTempPrt is not null THENSET sTemp = concat(sTemp,',',sTempPrt);ELSELEAVE 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);
0 0
- mysql树形结构遍历
- hibernate遍历树形结构
- MySQL树形遍历
- 已知遍历 推树形结构
- java 递归遍历树形结构
- java 递归遍历树形结构
- mysql中树形结构查询
- Mysql查询树形结构数据
- Oracle 树形结构遍历代码讲解
- Oracle数据库遍历树形结构表
- MSSQL树形结构表地遍历
- oracle中遍历树形结构的方法
- Oracle 树形结构遍历代码讲解【转】
- 递归调用,遍历CTreeCtrl的树形结构
- java实现文件夹的遍历(树形结构)
- MSSQL树形结构表地遍历
- Java实现通过递归遍历树形结构
- sqlite3树形结构遍历效率对比测试
- 三字母词和转义字符
- java通过http下载文件
- 用sqlplus的spool导文本文件
- 置信区间(已知样本均值和样本的方差,求总体均值的置信区间)(n < 30)
- [线性规划 对偶 凸包 三分] Codeforces 605C #335 (Div. 1) C. Freelancer's Dreams
- mysql树形结构遍历
- 禁止写入日志
- 关键字final
- poj1163
- caffe - 训练前如何修改 prototxt
- django 通过bootstrap fileinput 上传图片
- 【Bzoj1588】营业额统计
- ContentProvider内容提供者
- ITL对cloud computing的定义