MySQL中进行树所有子节点的查询
收集一下思路,提供者皆有分
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。
在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。
但很多时候我们无法控制树的深度。那么在MySQL中如何实现?(可用SQL语句,存储过程,函数,不用外部的程序如PHP,C..)
样例数据:
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)
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