简介: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递归查询树状表的子节点、父节点具体实现相关推荐

  1. mysql 递归查找父节点_MYSQL递归查询,根据子类ID查询所有父类(最全)

    数据表结构 id    name  parent_id 1        A        0 2        B        1 3        C        1 4        D   ...

  2. mysql实现树状查询_MySQL实现树状所有子节点查询的方法

    本文实例讲述了MySQL实现树状所有子节点查询的方法.分享给大家供大家参考,具体如下: 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方 ...

  3. mysql st_contains实现_MySQL实现树状所有子节点查询的方法

    本文实例讲述了MySQL实现树状所有子节点查询的方法.分享给大家供大家参考,具体如下: 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方 ...

  4. mysql 递归查找部门下面的所有被这个部门管理的部门(mysql 递归查找节点的所有子节点)

    今天小编遇到了一个需求,需要使用mysql查询部门下面所有子部门,换句话来说就是查询节点下的所有节点,因为一直使用的是oracle,oracle有个start with .... connect by ...

  5. 递归查询树状结构某个确定的节点

    递归 递归算法在日常工作中算是用的比较多的一种,比如DOM树的遍历,多层级树状结构的生成,遍历寻找某个树节点等 1 先来看下数据结构 var result = {id:0,name:"张飞& ...

  6. java树父节点_Java基础 - 树的实现(一)父节点表示法

    父节点表示法: 通过前面的介绍可以发现,树中除根节点之外的每个节点都有一个父节点.为了记录树中节点与节点之间的父子关系,可以为每个节点增加一个parent域,用来记录该节点的父节点.对于如下图所示的数 ...

  7. mysql的树状表结构设计。

    公司要做一个树状结构,列表展示的时候不仅要有节点信息,还要有该节点的路径信息. 众所周知mysql没有oracle 的递归查询,如果Java代码中查询的话.列表页几十条数据.在每个节点层数不定时,其实 ...

  8. JS-JavaScript节点Node的nodeName和nodeValue、节点之间的树状关系

    节点的名称和值 使用节点的nodeName和nodeValue属性可以读取节点的名称和值.这两个属性完全取决于节点的类型,具体如下表: 节点的nodeName和nodeValue属性说明: 节点类型 ...

  9. 何水无鱼,何山无石,何树无枝,何子无父,何女无夫,何城无市

    此谜语有6种解法:六种解法 解一: <释迦凡尘语录>记:南水无鱼?无山无石?阿人无父?弥女无夫?陀树无枝?佛城无市 ?隐喻<南无阿弥陀佛>六字.名曰<劝修经>. 解 ...

最新文章

  1. 温故一下Linux CentOS的VI/VIM命令
  2. 天津海尔扫地机器人维修点_女神好帮手!海尔扫地机器人 让生活化繁为简
  3. javascript—闭包
  4. oracle中primary,oracle中如何 Primary key自增
  5. 使用logstash将Mysql中的数据导入到ElasticSearch中(详细步骤,win_Elasticsearch)
  6. 《软件测试》第五次作业
  7. python 多进程 多核_go/node/python 多进程与多核cpu
  8. 思考 | 沈向洋博士:三十年科研路,我踩过的那些坑
  9. .net2005登录控件
  10. matlab2014a mex,在Matlab2014a中用MEX编译CUDA的问题
  11. 邮局用计算机对信件进行自动分拣,计算机组成结构习题集
  12. MMKV_MMKV——1.使用
  13. iPhone5充不进电
  14. window.history详细解析
  15. python在煤矿的用途-息烽高校邦数据科学通识课【Python爬虫】答案
  16. 【洛谷题解】P2356 弹珠游戏
  17. qt编写网易云界面(10)----排行榜模块
  18. cyt の heart
  19. 克隆数据库linux 不能登录,DockerSQL2017Linux容器的数据库克隆
  20. 【线上商城】后端代码的架构问题

热门文章

  1. zabbix-自定义键值监控网卡IN、OUT流量
  2. Swift类属性 static
  3. Linux NTP服务配置
  4. PHP面向对象常见符号总结($this- 、self ::)
  5. Codeforces Round 212 Div 2 报告(以前没写完,现在也没心情补了,先就这样吧)
  6. 使用 Apache Hadoop 处理日志
  7. 口译务实——unit10 II
  8. PaddlePaddle eval后报错terminate all the procs的解决方法
  9. 中职学校计算机教学参考文献,学生计算机论文,关于中职学校计算机专业教学现状相关参考文献资料-免费论文范文...
  10. 按条件分类_史上最全物流仓储分类方式