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

下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

编程之家小编现在分享给大家,也给大家做个参考。

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 @[email protected]+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

以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值