有一表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级树结构,有可能为多级。

解决方案 »

  1.   

    mysql> select * from t;
    +------+------------+------+
    | 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>
      

  2.   


    1)继续INNER JOIN 或者 LEFT JOIN下去,直到最大级数。
    2)使用递归存储过程。参考下贴
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx
      

  3.   

    在MYSQL中只有用SP来递归查询了
      

  4.   

    嘿嘿,我用ACMAIN_CHM的方法,先获取分组数量,然后动态构建SQL语句,最后执行查询,功能实现了,谢谢各位。