php mysql 家谱_mysql家谱表查询某人所有后代
我们经常会把一些树形的结构放在一张表里,例如家谱,菜单等。这种表最大的问题就是当我们需要查询某个记录的所有子记录时,很难用简单的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家谱表查询某人所有后代相关推荐
- 家谱mysql_mysql家谱表查询某人所有后代
mysql家谱表查询某人所有后代 SQL #mysql #家谱表2012-05-04 23:51 工作中,常会把一些树形的结构放在一张表里,例如家谱,菜单等.这种表最大的问题就是当我们需要查询某个记录 ...
- mysql 家谱关系_mysql家谱表查询某人所有后代
下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. CREATE TABLE `people` ( `id` INT(11) NOT NULL ...
- 家谱整站源码php_mysql家谱表查询某人所有后代
CREATE TABLE `people` ( `id` INT(11) NOT NULL, `name` VARCHAR(50) NULL DEFAULT NULL, `pid` INT(11) N ...
- MySQL充电_Mysql 充电站SQL查询1--171221--mysql-sql
Mysql 充电站SQL查询1--171221--mysql-sql --当月至现在查询支付成功后未成功充电的情况 select c.a 失败数,c.b 总数,c.a1,c.cs 失败率,c.cc 成 ...
- mysql打开慢查询_MySQL 开启慢查询日志的方法
1.1 简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 1.2 登录数据库查看 [root@localhost lib]# ...
- mysql 多表既有内连接又有外连接_MySQL 多表查询中的内连接和外连接
一般情况下一个网站的数据库通常会有多张数据表组成,这些数据表分别存储网站不同区域的内容.数据表之间可以用类似 ID 的字段来关联,在查询的时候可以通过一条语句来查询多张表的内容.例如 论坛的数据库,帖 ...
- mysql跨库查询 索引_MySQL中跨库查询怎么搞?
导读 在MySQL中跨库查询主要分为两种情况,一种是同服务的跨库查询;另一种是不同服务的跨库查询;它们进行跨库查询是不同的,下面就具体介绍这两种跨库查询. 在MySQL中跨库查询主要分为两种情况,一种 ...
- mysql 执行查询_MySQL查询的执行过程
我们总是希望MySQL能够获得更高的查询性能,最好的办法是弄清楚MySQL是如何优化和执行查询的.一旦理解了这一点,就会发现:很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的 ...
- mysql排重_mysql 排重查询
GROUP BY 语句可以实现某一列的去重查询. 直接上语句: select io_dev_id from io_info where (TID=1 AND host_name='yang1') GR ...
最新文章
- 分块的单点修改查询区间和_树状数组的区间修改与单点查询与区间查询
- 对声音信标信号的采样频率
- [YTU]_2907 (类重载实现矩阵加法)
- file input 点击没反应_动态input file多文件上传到后台没反应的解决方法!!!
- C#中is vs as 1
- [Android5 系列—] 1. 构建一个简单的用户界面
- 人体识别_你知道人脸识别,但你知道人体识别吗?ReID技术了解一下!
- Sublime Text安装与配置
- 写给小白的网站优化初步全过程
- 档案管理制度计算机管理制度,计算机管理档案制度
- 什么是AOP(通俗易懂)
- 2015年8月5日------------赵鑫
- 利用Python和OpenCV将图像灰度图转为3D图并显示
- python学习(二)User-Agent
- 找出N个元素的数组中最大的K个数
- 相干光通信基础知识(一)
- SKNet:自适应感受野
- 2019,无数人改变命运的绝佳之年!(深度)
- 著名基金经理彼得林奇的选股原则
- 使用Web技术来实现人民日报的点亮武汉
热门文章
- 超详细python下简单快速下载opencv
- Python之Pandas连接详解
- PowerDesigner画ER图详细教程
- C语言头文件.h互相包含所引发的一系列错误C2143之类的解决方法
- 有什么办法可以预防网页被劫持
- 九、cadence ic 5141 ——反相器版图绘制
- 括号配对检测python123_括的拼音_括组词_括意思(解释)-常用汉字大全
- 计算机软考高级证自明评职称,IT领域唯一的国家级证书,好处多多,入手不亏...
- 点集拓扑学思维导图(附pdf源文档)
- ENVI 混合像元分解