问题是这样,有一张链表,2个字段,一个是id,一个是父id,我想写一个存储过程,生成一张临时表得出每个id,完整的上下级字符串路径。
例如:
A表
id  id_parent
1   0
2   1
3   1
4   2
5   3
6   4
7   6
8   4通过查询希望得到数据效果如下:
id   id_path
1    0\1
2    1\2
3    1\3
4    1\2\4
5    1\3\5
6    1\2\4\6
7    1\2\4\6\7
8    1\2\4\8

解决方案 »

  1.   

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

  2.   

    感谢ACMAIN_CHM百忙中给予的回复,可惜,看到您的回帖时,我已经将过程写完了,不过参看您给出的连接,发现,写法上竟然是非常雷同,o(∩_∩)o 哈哈。但是,目前遇到一个新的问题,我在递归时,数据量小的情况下,一切正常,如果递归数据层很深的时候,存储过程就会报下面的错误:
    Procedure execution failed
    1436 - Thread stack overrun:  69048 bytes used of a 196608 byte stack, and 128000 bytes needed.  Use 'mysqld -O thread_stack=#' to specify a bigger stack.
    我知道需要调整thread_stack的值,但是我找了很多资料,都没有找到该如何修改这个值。
    曾经尝试了如下的做法
    mysql> #thread_stack = 512K;
        -> 
        -> ;Query OK, 0 rows affected
    感觉上应该是增大了该值,但是,重新运行过程,还是同样的错误,根本没有变化,十分不解,谁给我点提点啊,我这是今天第一次接触mysql啊,毫无经验啊。
      

  3.   

    这是我的mysql安装目录F:\Program Files\MySQL\MySQL Server 5.1
    该目录中只有如下几个ini文件:
    my.ini
    my-huge.ini
    my-innodb-heavy-4G.ini
    my-large.ini
    my-medium.ini
    my-small.ini
    my-template.ini
    在my-innodb-heavy-4G.ini和my-small.ini中我找到有thread_stack,我都将其设置成1024k,应该够大了。但是好像没有任何效果,重启mysql服务,运行过程还是报相同的错误,这是为什么呢?
      

  4.   

    你的代码是什么? 应该不需要使用递归。
    给出你的 create table , insert into ,create procudure 等语句。
      

  5.   


    这是一个实现上下级的链表数据串的一个小需求,如果不用递归,我真想不出还怎么去实现。此时,我已经将个中所有环节出现的疑难问题一一解决。之前设置变量thread_stack值是在控制台设置的,但是应该是设置无效,我感觉是没有效果,也许这个参数不是可以在服务运行时,动态改变的。目前解决的办法是,修改ini文件,就是my.ini,这个文件默认是没有thread_stack这个变量的,我手动新增了这个变量,然后,重启服务,运行过程,完事大吉。网上说了一堆,怎么修改这个值的办法,没有一个是有效的,我了个去。之所以把这个写出来,是为了给再遇到这个问题的难友,一条路,毕竟,我也是冥思苦想好久,才搞定的,新手上路,不容易啊,都是程序员,你懂的。