我们经常会把一些树形的结构放在一张表里,例如家谱,菜单等。这种表最大的问题就是当我们需要查询某个记录的所有子记录时,很难用简单的sql搞定。我们可以专门写个过程来做这种事情,下面是我写的一个例子。fghgfhgfhgf MySQL CREATE TABLE `people` ( `id`

我们经常会把一些树形的结构放在一张表里,例如家谱,菜单等。这种表最大的问题就是当我们需要查询某个记录的所有子记录时,很难用简单的sql搞定。我们可以专门写个过程来做这种事情,下面是我写的一个例子。fghgfhgfhgf

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中文网,转载请注明出处,感谢您的尊重!

php mysql 家谱_mysql家谱表查询某人所有后代相关推荐

  1. 家谱mysql_mysql家谱表查询某人所有后代

    mysql家谱表查询某人所有后代 SQL #mysql #家谱表2012-05-04 23:51 工作中,常会把一些树形的结构放在一张表里,例如家谱,菜单等.这种表最大的问题就是当我们需要查询某个记录 ...

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

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. CREATE TABLE `people` ( `id` INT(11) NOT NULL ...

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

    CREATE TABLE `people` ( `id` INT(11) NOT NULL, `name` VARCHAR(50) NULL DEFAULT NULL, `pid` INT(11) N ...

  4. MySQL充电_Mysql 充电站SQL查询1--171221--mysql-sql

    Mysql 充电站SQL查询1--171221--mysql-sql --当月至现在查询支付成功后未成功充电的情况 select c.a 失败数,c.b 总数,c.a1,c.cs 失败率,c.cc 成 ...

  5. mysql打开慢查询_MySQL 开启慢查询日志的方法

    1.1 简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 1.2 登录数据库查看 [root@localhost lib]# ...

  6. mysql 多表既有内连接又有外连接_MySQL 多表查询中的内连接和外连接

    一般情况下一个网站的数据库通常会有多张数据表组成,这些数据表分别存储网站不同区域的内容.数据表之间可以用类似 ID 的字段来关联,在查询的时候可以通过一条语句来查询多张表的内容.例如 论坛的数据库,帖 ...

  7. mysql跨库查询 索引_MySQL中跨库查询怎么搞?

    导读 在MySQL中跨库查询主要分为两种情况,一种是同服务的跨库查询;另一种是不同服务的跨库查询;它们进行跨库查询是不同的,下面就具体介绍这两种跨库查询. 在MySQL中跨库查询主要分为两种情况,一种 ...

  8. mysql 执行查询_MySQL查询的执行过程

    我们总是希望MySQL能够获得更高的查询性能,最好的办法是弄清楚MySQL是如何优化和执行查询的.一旦理解了这一点,就会发现:很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的 ...

  9. mysql排重_mysql 排重查询

    GROUP BY 语句可以实现某一列的去重查询. 直接上语句: select io_dev_id from io_info where (TID=1 AND host_name='yang1') GR ...

最新文章

  1. 分块的单点修改查询区间和_树状数组的区间修改与单点查询与区间查询
  2. 对声音信标信号的采样频率
  3. [YTU]_2907 (类重载实现矩阵加法)
  4. file input 点击没反应_动态input file多文件上传到后台没反应的解决方法!!!
  5. C#中is vs as 1
  6. [Android5 系列—] 1. 构建一个简单的用户界面
  7. 人体识别_你知道人脸识别,但你知道人体识别吗?ReID技术了解一下!
  8. Sublime Text安装与配置
  9. 写给小白的网站优化初步全过程
  10. 档案管理制度计算机管理制度,计算机管理档案制度
  11. 什么是AOP(通俗易懂)
  12. 2015年8月5日------------赵鑫
  13. 利用Python和OpenCV将图像灰度图转为3D图并显示
  14. python学习(二)User-Agent
  15. 找出N个元素的数组中最大的K个数
  16. 相干光通信基础知识(一)
  17. SKNet:自适应感受野
  18. 2019,无数人改变命运的绝佳之年!(深度)
  19. 著名基金经理彼得林奇的选股原则
  20. 使用Web技术来实现人民日报的点亮武汉

热门文章

  1. 超详细python下简单快速下载opencv
  2. Python之Pandas连接详解
  3. PowerDesigner画ER图详细教程
  4. C语言头文件.h互相包含所引发的一系列错误C2143之类的解决方法
  5. 有什么办法可以预防网页被劫持
  6. 九、cadence ic 5141 ——反相器版图绘制
  7. 括号配对检测python123_括的拼音_括组词_括意思(解释)-常用汉字大全
  8. 计算机软考高级证自明评职称,IT领域唯一的国家级证书,好处多多,入手不亏...
  9. 点集拓扑学思维导图(附pdf源文档)
  10. ENVI 混合像元分解