mysql树形结构查询(存储过程)

就用数据数据库表地址数据(中国地区)来说吧(用Windows请使用gbk !!)

可直接运行(去除注解)

存储过程:

DELIMITER //drop procedure if exists   findLChild///* iid 递归父节点 , layer 允许递归深度 */CREATE PROCEDURE findLChild(iid bigint(20),layer bigint(20))BEGIN    /*创建接受查询的临时表 */    create temporary  table if not exists tmp_table(id bigint(20),name varchar(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8;    /*最高允许递归数*/    SET @@max_sp_recursion_depth = 99 ;     call iterative(iid,layer);/*核心数据收集*/    select * from tmp_table ;/* 展现 */    drop temporary  table if  exists   tmp_table ;/*删除临时表*/   END;//DELIMITER ;DELIMITER //drop procedure if exists   iterative //CREATE PROCEDURE iterative(iid bigint(20),layer bigint(20))    BEGIN         declare tid bigint(20) default -1 ;         declare tname varchar(50) character set utf8;         /* 游标定义 */         declare cur1 CURSOR FOR select id,name from location where fid=iid ;         declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tid = null;      /* 允许递归深度 */      if layer>0 then         OPEN cur1 ;         FETCH cur1 INTO tid,tname ;           WHILE ( tid is not null )               DO              /* 核心数据收集 */           insert into tmp_table values(tid,tname);               call iterative(tid,layer-1);              FETCH cur1 INTO tid,tname ;           END WHILE;       end if;    END;//DELIMITER ;

//运行!!

mysql> call findLChild(1,1);
+------+------------------+
| id  | name       |
+------+------------------+
|  2 | 北京       |
|  4 | 上海       |
|  6 | 香港特别行政区  |
|  8 | 澳门特别行政区  |
|  10 | 河北       |
|  23 | 山西       |
|  35 | 辽宁       |
|  50 | 吉林       |
|  60 | 黑龙江      |
|  74 | 江苏       |
|  88 | 浙江       |
| 101 | 安徽       |
| 119 | 福建       |
| 129 | 江西       |
| 142 | 山东       |
| 160 | 河南       |
| 179 | 湖北       |
| 198 | 湖南       |
| 213 | 广东       |
| 235 | 甘肃       |
| 250 | 四川       |
| 272 | 贵州       |
| 282 | 海南       |
| 301 | 云南       |
| 318 | 青海       |
| 327 | 陕西       |
| 348 | 广西壮族自治区  |
| 363 | 西藏自治区    |
| 371 | 宁夏回族自治区  |
| 377 | 新疆维吾尔自治区 |
| 400 | 内蒙古自治区   |
| 413 | 台湾省      |
+------+------------------+
32 rows in set (0.02 sec)

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索递归
, 存储过程
, layer
, delimiter
, mysql递归查询
, mysql递归oracle
, declare
, 树形查询
, MYSQL的递归查询
, bigint
, 临时表递归
java递归树形结构
mysql存储树形结构、mysql 树形结构查询、mysql树形结构、mysql 树形结构设计、mysql 树形结构排序,以便于您获取更多的相关知识。

时间: 2024-10-14 22:05:06

mysql树形结构查询(存储过程)的相关文章

sqlserver 树形结构查询单表实例代码

--树形sql查询 WITH TREE AS( --创建一个虚拟表 SELECT * FROM sys_organiz --指定需要查询的表 WHERE organize_code = '100000' -- 指定父节点条件 UNION ALL --联合查询 SELECT sys_organiz.* FROM sys_organiz,TREE WHERE TREE.organize_code = sys_organiz.organize_parent_code ) SELECT * FROM T

Oracle SQL树形结构查询_oracle

oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是: 复制代码 代码如下: select * from tablename start with cond1 connect by cond2 where cond3; 简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段: id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构. 用上

oracle 根据树形结构查询一级,二级报表sql 优化问题

问题描述 问题是:当出现数据量特别大的时候,sql该如何优化,谢谢.select t.cate_1_id, max(t.supplier_count), max(t.supplier_t_count), max(t.supplier_a_count), max(t_rate), max(a_rate), max(t.vcode_count), max(vcode_rate), max(t.supplier_l_count), max(l_rate), max(t.supplier_b_count

数据库树形结构查询语句

表: 数据: 查询方法: WITH Tree AS ( SELECT * FROM TableT AS tt WHERE tt.ID=8 UNION ALL SELECT tt.* FROM Tree AS t INNER JOIN TableT AS tt ON t.ID = tt.pCatID ) SELECT * FROM Tree AS t 查出父ID为8的所有节点下的数据

C#连接mysql然后查询存储过程

问题描述 C#连接mysql然后查询存储过程 C#连接mysql 然后查询一个名为userinfo的存储过程,传参5 sql:call userinfo(5); 这个是查询用户的信息的存储过程,执行这个sql,然后获得查询出来的结果,并且输出. 有没有大神写个demo我学习一下,谢谢! //正常执行sql语句我会,不会查存储过程 解决方案 C#调用mysql查询存储过程c#连接mysql 找不到存储过程mysql 树形结构查询(存储过程) 解决方案二: using System;using Sy

在Mysql数据库里通过存储过程实现树形的遍历_Mysql

关于多级别菜单栏或者权限系统中部门上下级的树形遍历,oracle中有connect by来实现,mysql没有这样的便捷途径,所以MySQL遍历数据表是我们经常会遇到的头痛问题,下面通过存储过程来实现. 1,建立测试表和数据: DROP TABLE IF EXISTS csdn.channel; CREATE TABLE csdn.channel ( id INT(11) NOT NULL AUTO_INCREMENT, cname VARCHAR(200) DEFAULT NULL, pare

ALL IN ONE : 利用存储过程实现BBS树形结构的存储及有回复email通知(不必借助任何组件发Email)功能的实...

存储过程     BBS的树形结构一直是大家讨论的话题,以前我做都是利用命名规则来实现,这样的好处是表的冗余字段少,结构清楚,容易理解,但其局限性也很明显.感谢廖家远提供算法(实话说,当年算法就没有学好),我决定采用一下这种算法来实现bbs的树形结构.基本思路如下:    bbs文章表中有这样几个字段:    RootID :   根ID , 新发贴子及其所有子贴都相同.    FatherID:  父ID , 父贴子ID    Layer:     层数 , 贴子在树中的深度.    Orde

mssql server 树形结构的存储与查询实例

mssql server 树形结构的存储与查询实例 数据库教程设计中常常会遇到需要存储树形结构,比如员工关系表.组织结构表,等等. sql code --测试数据 create table #employees(     employeecode varchar(20) not null primary key clustered,     reporttocode varchar(20) null) go insert into #employees values('a',null) inse

oracle 查询树形结构二级节点的办法

问题描述 如题: 我有一张树形结构的表,里面存了一级二级和三级.通过每条记录的parentCode区分,我现在想得到二级节点的code并已二级节点来分组统计数据,怎么写sql呢?谢谢 解决方案 select t1.* from A t1 left join B t2 on t1.parentCode = t2.codeand t2.parentCode = 0解决方案二:你既然想要获取二级节点,从你说的来看,parentCode 应该是父类的编码. 既然是这样,那么一级节点,应该就没有父类编码的