mysql 树 递归深度查询

zhao2271394 2010-05-17 08:22:24
1
/ | \
2 3 4
/ | \ \ |
5 6 7 8 9

mysql 或java 实现

1. 递归深度查询(向下查询) 只查询想要的子节点数。不如3层。5层,10层

2。 递归深度(向上查询) 比如:9的父节点有哪些 只要上面3个,或者5个。
...全文
5196 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
治哥 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]

set max_sp_recursion_depth=10;
我设置为十报这个错
Recursive limit 10 (as set by the max_sp_recursion_depth variable) was exceeded for routine createChildLst
[/Quote]
最小值是12,最大值是255
zhao2271394 2010-05-18
  • 打赏
  • 举报
回复
我是只想 查询下面10层的子节点。。。 查过10个我就不查不来
ACMAIN_CHM 2010-05-18
  • 打赏
  • 举报
回复
建议楼主花10分钟读一下这个.

问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
ACMAIN_CHM 2010-05-18
  • 打赏
  • 举报
回复
set max_sp_recursion_depth=100;
zhao2271394 2010-05-17
  • 打赏
  • 举报
回复
set max_sp_recursion_depth=10;
我设置为十报这个错
Recursive limit 10 (as set by the max_sp_recursion_depth variable) was exceeded for routine createChildLst

ACMAIN_CHM 2010-05-17
  • 打赏
  • 举报
回复
#10楼 已经很清楚的告诉你的了。
delimiter //
zhao2271394 2010-05-17
  • 打赏
  • 举报
回复
到底那个函数怎么创建的 我搞不清
zhao2271394 2010-05-17
  • 打赏
  • 举报
回复
我就是不会mysql 创建函数
ACMAIN_CHM 2010-05-17
  • 打赏
  • 举报
回复
ACMAIN_CHM 2010-05-17
  • 打赏
  • 举报
回复
有些无语!

如果别人给你的贴子你好象并不认真看

===============================================================

方法一:利用函数来得到所有子节点号。

创建一个function getChildLst, 得到一个由所有子节点号组成的字符串.


mysql> delimiter //
mysql>
mysql> CREATE FUNCTION `getChildLst`(rootId INT)
-> RETURNS varchar(1000)
-> BEGIN
-> DECLARE sTemp VARCHAR(1000);
-> DECLARE sTempChd VARCHAR(1000);
->
-> SET sTemp = '$';
-> SET sTempChd =cast(rootId as CHAR);
->
-> WHILE sTempChd is not null DO
-> SET sTemp = concat(sTemp,',',sTempChd);
-> SELECT group_concat(id) INTO sTempChd FROM treeNodes where FIND_IN_SET(pid,sTempChd)>0;
-> END WHILE;
-> RETURN sTemp;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> delimiter ;




===============================================================

zhao2271394 2010-05-17
  • 打赏
  • 举报
回复

CREATE FUNCTION `getChildLst`(rootId INT)
RETURNS varchar(1000)
BEGIN
DECLARE sTemp VARCHAR(1000);
DECLARE sTempChd VARCHAR(1000);

SET sTemp = '$';
SET sTempChd =cast(rootId as CHAR);

WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd);
SELECT group_concat(id) INTO sTempChd FROM treeNodes where FIND_IN_SET(pid,sTempChd)>0;
END WHILE;
RETURN sTemp;
END


执行后:
错误

SQL 查询:

CREATE FUNCTION `getChildLst` (
rootId INT
) RETURNS varchar( 1000 ) BEGIN DECLARE sTemp VARCHAR( 1000 ) ;

MySQL 返回:文档
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4


ACMAIN_CHM 2010-05-17
  • 打赏
  • 举报
回复
[Quote]那个创建函数有问题。。。[/Quote]
那段代码是已经测试过的了。
贴出你的错误信息。否则别人是不出你错在哪儿了。
congci001 2010-05-17
  • 打赏
  • 举报
回复
DADQE3444444444444444444444444444444444WWWWWWWWWWWWWWWWW
zhao2271394 2010-05-17
  • 打赏
  • 举报
回复
那个创建函数有问题。。。

ACMAIN_CHM 2010-05-17
  • 打赏
  • 举报
回复
参考该贴中的。 (怀疑你看了吗?)

方法三:利用中间表和过程

执行完后会产生一个tmpLst表,nLevel 为节点深度,sCort 为排序字段。
zhao2271394 2010-05-17
  • 打赏
  • 举报
回复
我是想要 下面3层的数据
或者上面三层的数据
ACMAIN_CHM 2010-05-17
  • 打赏
  • 举报
回复
参考下贴中的方法。

http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx
MySQL中进行树状所有子节点的查询
zhao2271394 2010-05-17
  • 打赏
  • 举报
回复
infoid name parentid weizhi
0 book1 null 1
2 book1 2 1
3 book1 2 2
剑心永远OK 2010-05-17
  • 打赏
  • 举报
回复
数据库结构要定好才能递归实现啊.

56,678

社区成员

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

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