存储过程利用递归查找出树节点以及所有子节点
来源:互联网 发布:php print 编辑:程序博客网 时间:2024/05/17 23:17
2015-1-29星期四
调用存储过程,查询所有的圈子
call circles ();
与回帖有关的储存过程
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies ()
BEGIN
set @@max_sp_recursion_depth=99;
select max_sp_recursion_depth;
SELECT
a.*
FROM
diz_reply AS a;
END//
call replies();
存储过程相互调用
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies ()
BEGIN
set @@max_sp_recursion_depth=99;
-- SELECT
-- a.*
-- FROM
-- diz_reply AS a;
call marc();
END//
call replies();
drop PROCEDURE if EXISTS marc;
delimiter //
create PROCEDURE marc()
begin
select
a.* from diz_circle as a;
end;
call marc();
测试游标:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies ()
BEGIN
DECLARE iid VARCHAR(32);
DECLARE nname VARCHAR(32);
declare cur1 CURSOR FOR SELECT a.id,a.topic_id from diz_reply as a ;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET iid = null;
OPEN cur1;
FETCH cur1 into iid,nname;
while(iid is not null) DO
select iid,nname;
fetch cur1 into iid,nname;
end while;
END//
call replies();
循环语句测试:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE procedure replies(num int)
BEGIN
while(num>50) DO
insert into ant(id,name) VALUES(num,'marc');
select * from ant;
set num=num-1;
end while;
end//
call replies(60);
利用游标插入数据到指定表:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies ()
BEGIN
DECLARE iid VARCHAR(32);
DECLARE nname VARCHAR(32);
declare cur1 CURSOR FOR SELECT a.id,a.topic_id from diz_reply as a ;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET iid = null;
OPEN cur1;
FETCH cur1 into iid,nname;
while(iid is not null) DO
INSERT into ant(id,name) values(iid,nname);
fetch cur1 into iid,nname;
end while;
END//
call replies();
创建临时表:
create temporary table if not exists tmp_table(id bigint(20),name varchar(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
利用循环插入数据到指定表:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE procedure replies(num int)
BEGIN
while(num>50) DO
insert into tem_table(id,name) VALUES(num,'info');
set num=num-1;
end while;
end//
call replies(60);
存储到固定表,然后再读取:
存储:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies ()
BEGIN
DECLARE iid VARCHAR(32);
DECLARE nname VARCHAR(32);
declare cur1 CURSOR FOR SELECT a.id,a.topic_id from diz_reply as a ;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET iid = null;
OPEN cur1;
FETCH cur1 into iid,nname;
while(iid is not null) DO
INSERT into tem_table(id,name) value(iid,nname);
fetch cur1 into iid,nname;
end while;
END//
call replies();
读取:
drop procedure if EXISTS marc;
delimiter //
CREATE PROCEDURE marc()
BEGIN
create temporary table if not exists tem_table(id VARCHAR(32),name varchar(32)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
call replies();
select * from tem_table;
drop temporary table if EXISTS tem_table;
end//
call marc();
创建表存储查询结果,再显示结果
储存:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies ()
BEGIN
DECLARE iid VARCHAR(32);
DECLARE nname VARCHAR(32);
declare cur1 CURSOR FOR SELECT a.id,a.topic_id from diz_reply as a ;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET iid = null;
OPEN cur1;
FETCH cur1 into iid,nname;
while(iid is not null) DO
INSERT into tem_table(id,name) value(iid,nname);
fetch cur1 into iid,nname;
end while;
END//
call replies();
创建表,显示信息:
drop procedure if EXISTS marc;
delimiter //
CREATE PROCEDURE marc()
BEGIN
create table if not exists tem_table(id VARCHAR(32),name varchar(32)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
call replies();
select * from tem_table;
drop temporary table if EXISTS tem_table;
end//
call marc();
创建临时表,存储到临时表,显示结果:
存储:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies ()
BEGIN
DECLARE iid VARCHAR(32);
DECLARE nname VARCHAR(32);
declare cur1 CURSOR FOR SELECT a.id,a.topic_id from diz_reply as a ;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET iid = null;
OPEN cur1;
FETCH cur1 into iid,nname;
while(iid is not null) DO
INSERT into tem_table(id,name) value(iid,nname);
fetch cur1 into iid,nname;
end while;
END//
call replies();
创建临时表,显示结果:
drop procedure if EXISTS marc;
delimiter //
CREATE PROCEDURE marc()
BEGIN
create TEMPORARY table if not exists tem_table(id VARCHAR(32),name varchar(32)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
call replies();
select * from tem_table;
drop temporary table if EXISTS tem_table;
end//
call marc();
统计查询结果:
drop procedure if EXISTS marc;
delimiter //
CREATE PROCEDURE marc()
BEGIN
create TEMPORARY table if not exists tem_table(id VARCHAR(32),name varchar(32)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
call replies();
select count(*) from tem_table;
drop temporary table if EXISTS tem_table;
end//
call marc();
2015-1-30星期五
递归实现查找树节点,查找出指定回复下的所有节点:
递归实现查找:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies (pid VARCHAR(32),layer int)
BEGIN
DECLARE iid VARCHAR(32);
DECLARE nname VARCHAR(32);
declare cur1 CURSOR FOR SELECT a.id,a.topic_id from diz_reply as a where a.parent_id=pid;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET iid = null;
if(layer>0) THEN
OPEN cur1;
FETCH cur1 into iid,nname;
while(iid is not null) DO
INSERT into tem_table(id,name) value(iid,nname);
call replies(iid,layer-1);
fetch cur1 into iid,nname;
end while;
end if;
END//
call replies('402881f24b14aee0014b14d8a6fd0069',10);
创建临时表并且显示数据:
drop procedure if EXISTS marc;
delimiter //
CREATE PROCEDURE marc(pid VARCHAR(32),layer int)
BEGIN
create TEMPORARY table if not exists tem_table(id VARCHAR(32),name varchar(32)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
set @@max_sp_recursion_depth=99;
call replies(pid,layer);
select * from tem_table;
drop temporary table if EXISTS tem_table;
end//
call marc('402881f24b14aee0014b14d8a6fd0069',10);
查找根节点还有它的子节点:
利用递归查找所有子节点:
drop PROCEDURE if EXISTS replies;
delimiter //
CREATE PROCEDURE replies (pid VARCHAR(32),layer int)
BEGIN
DECLARE iid VARCHAR(32);
DECLARE nname VARCHAR(32);
declare cur1 CURSOR FOR SELECT a.id,a.topic_id from diz_reply as a where a.parent_id=pid;
declare CONTINUE HANDLER FOR SQLSTATE '02000' SET iid = null;
if(layer>0) THEN
OPEN cur1;
FETCH cur1 into iid,nname;
while(iid is not null) DO
INSERT into tem_table(id,name) value(iid,nname);
call replies(iid,layer-1);
fetch cur1 into iid,nname;
end while;
end if;
END//
call replies('402881f24b14aee0014b14d8a6fd0069',10);
查找出根节点还有它的子节点:
drop procedure if EXISTS marc;
delimiter //
CREATE PROCEDURE marc(pid VARCHAR(32),layer int)
BEGIN
create TEMPORARY table if not exists tem_table(id VARCHAR(32),name varchar(32)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
set @@max_sp_recursion_depth=99;
call replies(pid,layer);
select * from (select a.id,a.topic_id from diz_reply as a where a.id=pid UNION select b.* from tem_table as b)temp;
drop temporary table if EXISTS tem_table;
end//
call marc('402881f24b14aee0014b14d8a6fd0069',10);
0 0
- 存储过程利用递归查找出树节点以及所有子节点
- MySQL 存储过程 递归 获取所有子节点
- mysql读取树形结构所有子节点 mysql递归查询 详解 存储过程详解 查询所有子节点详解
- 递归获取当前节点以及所有子节点的unid
- 通用获取父节点/子节点/子节点下所有节点ID的存储过程
- 通用获取父节点/子节点/子节点下所有节点ID的存储过程
- Extjs4中tree组件查找所有父节点和查找所有子节点的递归方法
- mysql在存储过程中根据父id查找所有下级节点,递归
- sql删除树节点 及其子节点的全部(存储过程,游标,递归)
- 不用递归获取树节点的所有层级子节点
- SQL 语句递归查询 With AS 查找 所有 子节点
- SQL 语句递归查询 With AS 查找所有子节点
- SQL 双亲节点查找所有子节点
- MSSQL查找所有子节点
- Mysql中的递归层次查询(根据父节点查找所有的子节点和根据子节点查询所有的父节点)的两种运用
- sql 查找节点下的所有子节点,查找节点的所有父节点
- 取出所有树形结构父节点下的子节点(用存储过程实现)
- mysql -- 递归查询所有子节点
- hdu 5164 Matching on Array (用map实现的ac自动机)
- PHP学习笔记之万年历
- java 基础
- android 开机自启动程序原理
- java 常用汉字区间
- 存储过程利用递归查找出树节点以及所有子节点
- 屏蔽字O_ACCMODE 整数常量
- iOS Objective-C 正则表达式指南
- C#实现Base64编码与解码
- 就让我放空一下吧。。
- Thinkcpp 学习笔记 c11 成员函数指针
- Quartz Cron 表达式 格式: [秒] [分] [小时] [日] [月] [周] [年]
- 揭秘跑男全部游戏规则及说明
- 客户端JavaScript加密数据,服务端Java解密数据