最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

mysql家谱表查询某人所有后代

来源:懂视网 责编:小采 时间:2020-11-09 09:17:33
文档

mysql家谱表查询某人所有后代

mysql家谱表查询某人所有后代: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 DET
推荐度:
导读mysql家谱表查询某人所有后代: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 DET

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

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

mysql家谱表查询某人所有后代

mysql家谱表查询某人所有后代: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 DET
推荐度:
标签: 查询 所有 某人
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top