表结构
caId    caLevel   caName   caSuperior
1        1        基础设施   0
2        1        社会事业   0
3        2        公路建设   1
4        2        电网改造   2
5        3         高速路    3
6        3         大电网    4只有3级,怎么用sql语句查询出来下面这种结果的
caId    caLevel   caName   caSuperior
 1        1        基础设施   0
 3        2        公路建设   1
 5        3         高速路    3
 2        1        社会事业   0
 4        2        电网改造   2
 6        3         大电网    4
求大神呀,急急,明天项目要考核了MySQL树形结构  sql查询

解决方案 »

  1.   

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

  2.   


    先使用递归查询出需要查询的 caid ,之后再根据caid到表中查询 
    递归函数如下:
    CREATE 
    FUNCTION getChildLst(caId varchar(300) CHARACTER SET utf8)
      RETURNS varchar(1000) CHARSET utf8
    BEGIN 
       DECLARE sTemp VARCHAR(1000); 
       DECLARE sTempChd VARCHAR(1000); 
     
       SET sTemp = '$'; 
       SET sTempChd =caId; 
     
       WHILE sTempChd is not null DO 
         SET sTemp = concat(sTemp,',',sTempChd); 
          SELECT GROUP_CONCAT(`caId`)  INTO sTempChd from   ca  where   FIND_IN_SET(caSuperior,sTempChd)>0; 
       END WHILE; 
       RETURN sTemp; 
     END