小弟没弄过mysql,由于时间太紧,现向大侠们,求一个这样的存储过程?

I_am_Z 2012-05-18 03:21:09
问题是这样,有一张链表,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
...全文
164 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rczjp 2012-05-21
  • 打赏
  • 举报
回复
增大'max_allow_packet' 试试
I_am_Z 2012-05-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

你的代码是什么? 应该不需要使用递归。


给出你的 create table , insert into ,create procudure 等语句。
[/Quote]

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

引用 3 楼 的回复:

感谢ACMAIN_CHM百忙中给予的回复,可惜,看到您的回帖时,我已经将过程写完了,不过参看您给出的连接,发现,写法上竟然是非常雷同,o(∩_∩)o 哈哈。但是,目前遇到一个新的问题,我在递归时,数据量小的情况下,一切正常,如果递归数据层很深的时候,存储过程就会报下面的错误:
Procedure execution failed
1436 - Thread s……
[/Quote]
这是我的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服务,运行过程还是报相同的错误,这是为什么呢?
ACMAIN_CHM 2012-05-19
  • 打赏
  • 举报
回复
你的代码是什么? 应该不需要使用递归。


给出你的 create table , insert into ,create procudure 等语句。
回南山种豆 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

感谢ACMAIN_CHM百忙中给予的回复,可惜,看到您的回帖时,我已经将过程写完了,不过参看您给出的连接,发现,写法上竟然是非常雷同,o(∩_∩)o 哈哈。但是,目前遇到一个新的问题,我在递归时,数据量小的情况下,一切正常,如果递归数据层很深的时候,存储过程就会报下面的错误:
Procedure execution failed
1436 - Thread stack overrun: 6……
[/Quote]

mysql.ini中设置
I_am_Z 2012-05-18
  • 打赏
  • 举报
回复
感谢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啊,毫无经验啊。
ACMAIN_CHM 2012-05-18
  • 打赏
  • 举报
回复
参考手册中的语法和下贴中的例子自己先写一下吧。

http://blog.csdn.net/acmain_chm/article/details/4142971
MySQL中进行树状所有子节点的查询
在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们...
I_am_Z 2012-05-18
  • 打赏
  • 举报
回复
另外,如何在过程中,定义全局变量,我是想在递归的过程中使用,前一层计算的字符串,在递归到下一次时,可以持续累加?

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧