我想编写一个查询语句,按照顺利树形顺序返回查询数据,比如,先返回根结点,在返回,父结点的数据,如果父结点有子结点就跟着返回子结点数据,子结点还有子结点,在返回有的子结点,直到没有子结点为至,在返回下一个父结点,以此类推.  高手帮忙,万分感谢 
这是一个树形的数据,表就叫temp
CATEGORY_ID  PARENT_CATEGORY_ID  name
    0              -1             aaa   根结点
    1               0             b1    父结点1
    2               0             b2    父结点2
    3               1             c     父结点1子结点
    4               2             d     父结点2子结点
    5               0             b3    父结点3
    6               3             ee    子结点c的子结点显示结果如下0         -1            aa
1          0            b1
3          1            c
6          3            ee
2          0            b1
4          2            d
5          0            b3我想编写一个查询语句,按照顺利树形顺序返回查询数据,比如,先返回根结点,在返回,父结点的数据,如果父结点有子结点就跟着返回子结点数据,子结点还有子结点,在返回有的子结点,直到没有子结点为至,在返回下一个父结点,以此类推.  高手帮忙,万分感谢 

解决方案 »

  1.   

    MySQL中进行树状所有子节点的查询 
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx
      

  2.   

    你好:
        我用照他做的,表也要用他的,但执行完就报错
        call showChildLst(1);
        就报
    Recursive limit 0 (as set by the max_sp_recursion_depth variable) was exceeded for routine createChildLst
       错误
    拷的过程如下,一点都没有改,麻烦看一看CREATE PROCEDURE showChildLst (IN rootId INT)
    BEGIN
     CREATE TEMPORARY TABLE IF NOT EXISTS tmpLst 
     (sno int primary key auto_increment,id int,depth int);
     DELETE FROM tmpLst;CALL createChildLst(rootId,0);
     select tmpLst.*,treeNodes.* from tmpLst,treeNodes where tmpLst.id=treeNodes.id order by tmpLst.sno;
     END; CREATE PROCEDURE createChildLst (IN rootId INT,IN nDepth INT)
         BEGIN
          DECLARE done INT DEFAULT 0;
          DECLARE b INT;
          DECLARE cur1 CURSOR FOR SELECT id FROM treeNodes where pid=rootId;
          DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
       
         insert into tmpLst values (null,rootId,nDepth);     OPEN cur1;
       
         FETCH cur1 INTO b;
         WHILE done=0 DO
                  CALL createChildLst(b,nDepth+1);
                 FETCH cur1 INTO b;
         END WHILE;
        
          CLOSE cur1;
        END;
      

  3.   

    set max_sp_recursion_depth=12;一下,在文章中有提到。
      

  4.   

    不好意思,存储不熟,set max_sp_recursion_depth=12; 
    加到那里,万分感谢