首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Mysql >

MySQL中进行树所有子节点的查询,该如何解决

2012-03-25 
MySQL中进行树所有子节点的查询收集一下思路,提供者皆有分在Oracle 中我们知道有一个 Hierarchical Quer

MySQL中进行树所有子节点的查询
收集一下思路,提供者皆有分

在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。

在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。

但很多时候我们无法控制树的深度。那么在MySQL中如何实现?(可用SQL语句,存储过程,函数,用外部的程序如PHP,C..)

样例数据:

SQL code
create table treeNodes( id int primary key, nodename varchar(20), pid int);mysql> select * from treenodes;+----+----------+------+| id | nodename | pid  |+----+----------+------+|  1 | A        |    0 ||  2 | B        |    1 ||  3 | C        |    1 ||  4 | D        |    2 ||  5 | E        |    2 ||  6 | F        |    3 ||  7 | G        |    6 ||  8 | H        |    0 ||  9 | I        |    8 || 10 | J        |    8 || 11 | K        |    8 || 12 | L        |    9 || 13 | M        |    9 || 14 | N        |   12 || 15 | O        |   12 || 16 | P        |   15 || 17 | Q        |   15 |+----+----------+------+17 rows in set (0.00 sec)


BatchFile code
 1:A  +-- 2:B  |    +-- 4:D  |    +-- 5:E  +-- 3:C       +-- 6:F            +-- 7:G 8:H  +-- 9:I  |    +-- 12:L  |    |    +--14:N  |    |    +--15:O  |    |        +--16:P  |    |        +--17:Q  |    +-- 13:M  +-- 10:J  +-- 11:K  


目前想到的两个方法,期望有更多的思路。

http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx




[解决办法]
强力学习..
[解决办法]

http://blog.bowenye.com/read.php?7

我这儿有PostgreSQL实现了,不过这个函数没仔细想,只是能用而已

热点排行