mysql如何查询一个单表树形结构的数据

时间:2023-01-02 00:26:33
表结构如下

create table t1 (id number(5),name varchar(10),p_id number(5));

insert into t1 values (1,'name_1',null);
insert into t1 values (2,'name_2',1);
insert into t1 values (3,'name_3',null);
insert into t1 values (4,'name_4',1);
insert into t1 values (5,'name_5',3);
insert into t1 values (6,'name_6',1);
insert into t1 values (7,'name_7',3);
insert into t1 values (8,'name_8',4);
insert into t1 values (9,'name_9',2);
insert into t1 values (10,'name_10',1);


须要查询出这样的结果

   id      name    p_id
-------------------------------
1    1    name_1    
2    2    name_2    1
3    9    name_9    2
4    4    name_4    1
5    8    name_8    4
6    6    name_6    1
7    10    name_10    1
8    3    name_3    
9    5    name_5    3
10    7    name_7    3


我知道oracle用start with ……connect by prior ……来实现,但mysql怎么实现?貌似mysql不能用这个吧

9 个解决方案

#1


http://blog.csdn.net/acmain_chm/article/details/4142971
MySQL中进行树状所有子节点的查询
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...

#2


引用 1 楼  的回复:
比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现


楼上的大哥,我的只有两层,不想用存储过程,太麻烦,怎么用left join实现呢?

#3


你的结果是递归遍历的结果  无法用leftjoin实现

#4


我用其他方法解决了,但还是感谢楼上两位大哥

#5


lz啊 敢不敢把怎么解决的发出来分享一下……

每次见到“哦 我自己解决了 不过还是谢谢大家……(没有下文了)” 类似地话

真是xxxxxooooooooxxooxxooxxoxxo

#6


大哥,mysql怎么实现???????????????

#7


该回复于2013-11-14 08:43:13被管理员删除

#8


该回复于2013-11-14 15:32:26被管理员删除

#9


在业务层迭代可以实现赛

#1


http://blog.csdn.net/acmain_chm/article/details/4142971
MySQL中进行树状所有子节点的查询
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...

#2


引用 1 楼  的回复:
比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现


楼上的大哥,我的只有两层,不想用存储过程,太麻烦,怎么用left join实现呢?

#3


你的结果是递归遍历的结果  无法用leftjoin实现

#4


我用其他方法解决了,但还是感谢楼上两位大哥

#5


lz啊 敢不敢把怎么解决的发出来分享一下……

每次见到“哦 我自己解决了 不过还是谢谢大家……(没有下文了)” 类似地话

真是xxxxxooooooooxxooxxooxxoxxo

#6


大哥,mysql怎么实现???????????????

#7


该回复于2013-11-14 08:43:13被管理员删除

#8


该回复于2013-11-14 15:32:26被管理员删除

#9


在业务层迭代可以实现赛