欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

家谱整站源码php_mysql家谱表查询某人所有后代

发布时间:2025/3/11 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 家谱整站源码php_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 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

创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的家谱整站源码php_mysql家谱表查询某人所有后代的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。