mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现
简介:mysql5.0.94版本,该版本以及较高级的版本(5.5、6等等)尚未支持循环递归查询,和sqlserver、oracle相比,mysql难于在树状表中层层遍历的子节点。本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算是照搬了,父节点查询是逆思维弄的。
表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段(对应该记录的父节点,当然,一个父节点自然会有一个以上的子节点嘛)
CREATE FUNCTION `getChildList`(rootId INT)
RETURNS varchar(1000)
BEGIN
DECLARE sChildList VARCHAR(1000);
DECLARE sChildTemp VARCHAR(1000);
SET sChildTemp =cast(rootId as CHAR);
WHILE sChildTemp is not null DO
IF (sChildList is not null) THEN
SET sChildList = concat(sChildList,',',sChildTemp);
ELSE
SET 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)
BEGIN
DECLARE sParentList varchar(1000);
DECLARE sParentTemp varchar(1000);
SET sParentTemp =cast(rootId as CHAR);
WHILE sParentTemp is not null DO
IF (sParentList is not null) THEN
SET sParentList = concat(sParentTemp,',',sParentList);
ELSE
SET 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));*/
弄完了,pm说不要弄存储结构,在java里面多查几次吧。。。存储结构有很多优点,包括加快查询速度、提高安全性等等,但是会加大数据库负荷,很多文章建议结合使用,个人也觉得少用点会好些。
mysql 递归查找父节点_MySQL递归查询树状表的子节点、父节点具体实现相关推荐
- mysql 递归查找父节点_MYSQL递归查询,根据子类ID查询所有父类(最全)
数据表结构 id name parent_id 1 A 0 2 B 1 3 C 1 4 D ...
- mysql实现树状查询_MySQL实现树状所有子节点查询的方法
本文实例讲述了MySQL实现树状所有子节点查询的方法.分享给大家供大家参考,具体如下: 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方 ...
- mysql st_contains实现_MySQL实现树状所有子节点查询的方法
本文实例讲述了MySQL实现树状所有子节点查询的方法.分享给大家供大家参考,具体如下: 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方 ...
- mysql 递归查找部门下面的所有被这个部门管理的部门(mysql 递归查找节点的所有子节点)
今天小编遇到了一个需求,需要使用mysql查询部门下面所有子部门,换句话来说就是查询节点下的所有节点,因为一直使用的是oracle,oracle有个start with .... connect by ...
- 递归查询树状结构某个确定的节点
递归 递归算法在日常工作中算是用的比较多的一种,比如DOM树的遍历,多层级树状结构的生成,遍历寻找某个树节点等 1 先来看下数据结构 var result = {id:0,name:"张飞& ...
- java树父节点_Java基础 - 树的实现(一)父节点表示法
父节点表示法: 通过前面的介绍可以发现,树中除根节点之外的每个节点都有一个父节点.为了记录树中节点与节点之间的父子关系,可以为每个节点增加一个parent域,用来记录该节点的父节点.对于如下图所示的数 ...
- mysql的树状表结构设计。
公司要做一个树状结构,列表展示的时候不仅要有节点信息,还要有该节点的路径信息. 众所周知mysql没有oracle 的递归查询,如果Java代码中查询的话.列表页几十条数据.在每个节点层数不定时,其实 ...
- JS-JavaScript节点Node的nodeName和nodeValue、节点之间的树状关系
节点的名称和值 使用节点的nodeName和nodeValue属性可以读取节点的名称和值.这两个属性完全取决于节点的类型,具体如下表: 节点的nodeName和nodeValue属性说明: 节点类型 ...
- 何水无鱼,何山无石,何树无枝,何子无父,何女无夫,何城无市
此谜语有6种解法:六种解法 解一: <释迦凡尘语录>记:南水无鱼?无山无石?阿人无父?弥女无夫?陀树无枝?佛城无市 ?隐喻<南无阿弥陀佛>六字.名曰<劝修经>. 解 ...
最新文章
- 温故一下Linux CentOS的VI/VIM命令
- 天津海尔扫地机器人维修点_女神好帮手!海尔扫地机器人 让生活化繁为简
- javascript—闭包
- oracle中primary,oracle中如何 Primary key自增
- 使用logstash将Mysql中的数据导入到ElasticSearch中(详细步骤,win_Elasticsearch)
- 《软件测试》第五次作业
- python 多进程 多核_go/node/python 多进程与多核cpu
- 思考 | 沈向洋博士:三十年科研路,我踩过的那些坑
- .net2005登录控件
- matlab2014a mex,在Matlab2014a中用MEX编译CUDA的问题
- 邮局用计算机对信件进行自动分拣,计算机组成结构习题集
- MMKV_MMKV——1.使用
- iPhone5充不进电
- window.history详细解析
- python在煤矿的用途-息烽高校邦数据科学通识课【Python爬虫】答案
- 【洛谷题解】P2356 弹珠游戏
- qt编写网易云界面(10)----排行榜模块
- cyt の heart
- 克隆数据库linux 不能登录,DockerSQL2017Linux容器的数据库克隆
- 【线上商城】后端代码的架构问题
热门文章
- zabbix-自定义键值监控网卡IN、OUT流量
- Swift类属性 static
- Linux NTP服务配置
- PHP面向对象常见符号总结($this- 、self ::)
- Codeforces Round 212 Div 2 报告(以前没写完,现在也没心情补了,先就这样吧)
- 使用 Apache Hadoop 处理日志
- 口译务实——unit10 II
- PaddlePaddle eval后报错terminate all the procs的解决方法
- 中职学校计算机教学参考文献,学生计算机论文,关于中职学校计算机专业教学现状相关参考文献资料-免费论文范文...
- 按条件分类_史上最全物流仓储分类方式