博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL递归查询树状表的子节点、父节点具体实现
阅读量:2230 次
发布时间:2019-05-09

本文共 1412 字,大约阅读时间需要 4 分钟。

mysql版本(5.5、6等等)尚未支持循环递归查询,和sqlserver、oracle相比,mysql难于在树状表中层层遍历的子节点。本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算是照搬了,父节点查询是逆思维弄的。

表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段(对应该记录的父节点,当然,一个父节点自然会有一个以上的子节点嘛)

 

CREATE FUNCTION `getChildList`(rootId INT)RETURNS varchar(1000)BEGINDECLARE sChildList VARCHAR(1000);DECLARE sChildTemp VARCHAR(1000);SET sChildTemp =cast(rootId as CHAR);WHILE sChildTemp is not null DOIF (sChildList is not null) THENSET sChildList = concat(sChildList,',',sChildTemp);ELSESET sChildList = concat(sChildTemp);END IF;SELECT group_concat(id) INTO sChildTemp FROM user_role where FIND_IN_SET(parentid,sChildTemp)>0;END WHILE;RETURN sChildList;END;/*获取子节点*//*调用: 1、select getChildList(0) id; 2、select * 5From user_role where FIND_IN_SET(id, getChildList(2));*/

 

CREATE FUNCTION `getParentList`(rootId INT)RETURNS varchar(1000)BEGINDECLARE sParentList varchar(1000);DECLARE sParentTemp varchar(1000);SET sParentTemp =cast(rootId as CHAR);WHILE sParentTemp is not null DOIF (sParentList is not null) THENSET sParentList = concat(sParentTemp,',',sParentList);ELSESET sParentList = concat(sParentTemp);END IF;SELECT group_concat(parentid) INTO sParentTemp FROM user_role where FIND_IN_SET(id,sParentTemp)>0;END WHILE;RETURN sParentList;END;/*获取父节点*//*调用: 1、select getParentList(6) id; 2、select * From user_role where FIND_IN_SET(id, getParentList(2));*/

 

转载于:https://www.cnblogs.com/interdrp/p/6839289.html

你可能感兴趣的文章
TensorFlow-7-TensorBoard Embedding可视化
查看>>
轻松看懂机器学习十大常用算法
查看>>
一个框架解决几乎所有机器学习问题
查看>>
特征工程怎么做
查看>>
机器学习算法应用中常用技巧-1
查看>>
机器学习算法应用中常用技巧-2
查看>>
通过一个kaggle实例学习解决机器学习问题
查看>>
决策树的python实现
查看>>
Sklearn 快速入门
查看>>
了解 Sklearn 的数据集
查看>>
用ARIMA模型做需求预测
查看>>
推荐系统
查看>>
TensorFlow-11-策略网络
查看>>
浅谈 GBDT
查看>>
如何选择优化器 optimizer
查看>>
一文了解强化学习
查看>>
CART 分类与回归树
查看>>
seq2seq 的 keras 实现
查看>>
seq2seq 入门
查看>>
什么是 Dropout
查看>>