CREATE TABLE `people` (
`id` INT(11) NOT NULL,
`name` VARCHAR(50) NULL DEFAULT NULL,
`pid` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
);
CREATE DEFINER=`root`@`%` PROCEDURE `getChildren`(IN `parentId` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT '获取某人所有后代'
BEGIN
#存放结果的临时表
DROP TABLE IF EXISTS children;
CREATE TEMPORARY TABLE children SELECT 0 pLevel,p.* FROM `people` p WHERE id=parentId;
#存放中间结果的临时表
DROP TABLE IF EXISTS tem;
CREATE TEMPORARY TABLE tem SELECT id FROM `people` limit 0;
#逐级填充后代
SET @pLevel=1;
REPEAT
#清空上次数据
TRUNCATE TABLE tem;
#将当前level的后代id放入临时表
INSERT INTO tem SELECT p.id FROM `people` P, children c
WHERE p.pid=c.id AND c.pLevel=(@pLevel-1);
#将当前level的后代数据塞入结果临时表
INSERT INTO children SELECT @pLevel pLevel,p.* FROM `people` p, tem t
WHERE p.id=t.id;
SET @pLevel=@pLevel+1;
UNTIL NOT EXISTS (SELECT * FROM tem) OR @pLevel > 10
END REPEAT;
#调整表结构,删除临时列和不需要的数据
ALTER TABLE children DROP COLUMN pLevel;
DELETE FROM children WHERE id=parentId;
#返回结果
SELECT * from children;
END 0
0
相关文章
MySQL怎么查看版本号_查询MySQL数据库版本命令
如何减少回表查询_mysql索引访问优化
mysql中子查询如何书写_mysql 子查询教程
如何优化in查询_mysql条件查询性能
mysql中触发器在数据库设计中的应用实践
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
2026赚钱平台入口大全
2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。
76
2026.01.31
无需付费的漫画app大全
想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。
67
2026.01.31
漫画免费在线观看地址大全
想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。
19
2026.01.31
热门下载
相关下载
精品课程
相关推荐
/
热门推荐
/
最新课程






