各位大虾们帮我解决个小问题 
      我有个产品类型表,在这个产品类型表中可以分为父节点和子结点
    但是我要取数据,取出来的数据要生成树状结构,这个要用递归来写,但是算法这一块,我有点儿头痛,想了好久,一直都没有想出来 
   表结构(我是个菜鸟,请各位给点儿源码吧,我努力了,但是确实写不出来,求助,各位大侠啦)
   --产品类型表
   create table productTypeTable (
     pid int  AUTO_INCREMENT primary key,
     name varchar(50) not null,
     descr varchar(255) null,
     cno int not null,
     grade int not null
   );
 测试数据:
  insert into productTypeTable(name,descr,cno,grade) value('电器类','这个类别都是电器',0,1);
  insert into productTypeTable(name,descr,cno,grade) values('食品类','这个类别是放的食品',0,1);
  insert into productTypeTable(name,descr,cno,grade) values('家用电器','这个类别都是家用电器',1,2);
  insert into productTypeTable(name,descr,cno,grade) values('公共设施电器','这个类别都公共设施电器',1,2);
  insert into productTypeTable(name,descr,cno,grade) values('牛奶类','这个类别都牛奶',3,2);
  insert into productTypeTable(name,descr,cno,grade) values('蒙牛牛奶类','这个类别都牛奶',5,3)
   
    想得到生成数据树状图为: (以后打算把这个结果集放到下拉类表中,以树状的样式反应出来,现在很多的都是这么做的,)
     
                               电器类
                                    家用电器
                                    公共设施电器
                               食品类
                                    牛奶类
                                        蒙牛牛奶类  

解决方案 »

  1.   

    树型结构--这个对象还要包含一个自身对象的引用作为父节点
    所以,你只要在你的对象属性中加入一个
    private ProductType parent;
    显示的时候,根据parentId即可
    代码自己写吧
      

  2.   

    如果是 oracle 和 sqlserver 2005以上,有一个现成的语句,具体的我不记得了,
    如果不是的话,你可能需要写存储过程了另外你也可以第一次只载入第一层,点哪个再去查第二层的,就是要总是查数据库……
      

  3.   

      引用 1 楼 wn_1985 的回复:
    树型结构--这个对象还要包含一个自身对象的引用作为父节点
    所以,你只要在你的对象属性中加入一个
    private ProductType parent;
    显示的时候,根据parentId即可
    代码自己写吧
                感觉还是不是很懂喃
      我的数据库设计的有问题没有呀  楼上
      

  4.   

    数据库不就是根据对象设计来的吗?
    我说了在对象中加入private ProductType parent;相应的你的数据库再加个字段来保留parentId字段即可
    这种问题,只要对象设计明白了,数据库、代码只不过是把对象间关系表达出来就是了
      

  5.   

    额,谢谢楼上 wn_1985  那我今天晚上得挑战下我自己了,我的数据库呀,改来改去的,头都大了,我用的ssh做项目,但是改起来真是不舒服
        特别是加字段呀,什么之类的,最麻烦