有一表t,结构为t(id int ,group_name varchar,pid int),实现树结构的存储,如何将树结构转换为平面列表的形式,假如表数据为:
id group_name pid
1 一楼 0
2 房间1 1
3 房间2 1
4 桌子1 2
5 桌子1 3
6 二楼 0
7 房间1 6
8 桌子1 7
转换为平面列表后为:
id group1 group2 group3
4 一楼 房间1 桌子1
5 一楼 房间2 桌子1
8 二楼 房间1 桌子1
上述示例为3级树结构,有可能为多级。
id group_name pid
1 一楼 0
2 房间1 1
3 房间2 1
4 桌子1 2
5 桌子1 3
6 二楼 0
7 房间1 6
8 桌子1 7
转换为平面列表后为:
id group1 group2 group3
4 一楼 房间1 桌子1
5 一楼 房间2 桌子1
8 二楼 房间1 桌子1
上述示例为3级树结构,有可能为多级。
+------+------------+------+
| id | group_name | pid |
+------+------------+------+
| 1 | 一楼 | 0 |
| 2 | 房间1 | 1 |
| 3 | 房间2 | 1 |
| 4 | 桌子1 | 2 |
| 5 | 桌子1 | 3 |
| 6 | 二楼 | 0 |
| 7 | 房间1 | 6 |
| 8 | 桌子1 | 7 |
+------+------------+------+
8 rows in set (0.00 sec)mysql> select t3.id,t1.group_name As group1,t2.group_name As group2,t3.group_name as group3
-> from t t1 Inner join t t2 on t1.id=t2.pid
-> inner Join t t3 on t2.id=t3.pid;
+------+--------+--------+--------+
| id | group1 | group2 | group3 |
+------+--------+--------+--------+
| 4 | 一楼 | 房间1 | 桌子1 |
| 5 | 一楼 | 房间2 | 桌子1 |
| 8 | 二楼 | 房间1 | 桌子1 |
+------+--------+--------+--------+
3 rows in set (0.01 sec)mysql>
1)继续INNER JOIN 或者 LEFT JOIN下去,直到最大级数。
2)使用递归存储过程。参考下贴
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx