mysql递归查询

mysql递归查询

ID:38189114

大小:43.50 KB

页数:9页

时间:2019-06-07

mysql递归查询_第1页
mysql递归查询_第2页
mysql递归查询_第3页
mysql递归查询_第4页
mysql递归查询_第5页
资源描述:

《mysql递归查询》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在Oracle中我们知道有一个HierarchicalQueries通过CONNECTBY我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4,那么所有节点为根的树的深度均不会超过4,则我们可以直接通过leftjoin来实现。 但很多时候我们无法控制树的深度。这时就需要在MySQL中用存储过程来实现或在你的程序中来实现这个递归。本文讨论一下几种实现的方法。 样例数据:mysql>createta

2、bletreeNodes   ->(   -> idintprimarykey,   -> nodenamevarchar(20),   -> pidint   ->);QueryOK,0rowsaffected(0.09sec)mysql>select*fromtreenodes;+----+----------+------+

3、id

4、nodename

5、pid 

6、+----+----------+------+

7、 1

8、A       

9、   0

10、

11、 2

12、B       

13、   1

14、

15、 3

16、C       

17、   1

18、

19、

20、 4

21、D       

22、   2

23、

24、 5

25、E       

26、   2

27、

28、 6

29、F       

30、   3

31、

32、 7

33、G       

34、   6

35、

36、 8

37、H       

38、   0

39、

40、 9

41、I       

42、   8

43、

44、10

45、J       

46、   8

47、

48、11

49、K       

50、   8

51、

52、12

53、L       

54、   9

55、

56、13

57、M       

58、   9

59、

60、14

61、N       

62、  12

63、

64、15

65、O       

66、  12

67、

68、16

69、P       

70、  15

71、

72、17

73、Q       

74、  15

75、+----+--

76、--------+------+17rowsinset(0.00sec)树形图如下 1:A +--2:B 

77、   +--4:D 

78、   +--5:E +--3:C      +--6:F           +--7:G 8:H +--9:I 

79、   +--12:L 

80、   

81、   +--14:N 

82、   

83、   +--15:O 

84、   

85、       +--16:P 

86、   

87、       +--17:Q 

88、   +--13:M +--10:J +--11:K   方法一:利用函数来得到所有子节点号。创建一个fun

89、ction getChildLst,得到一个由所有子节点号组成的字符串. mysql>delimiter//mysql>mysql>CREATEFUNCTION`getChildLst`(rootIdINT)  ->RETURNSvarchar(1000)  ->BEGIN  ->  DECLAREsTempVARCHAR(1000);  ->  DECLAREsTempChdVARCHAR(1000);  ->  ->  SETsTemp='$';  ->  SETsTempChd=cast(rootIdasCHA

90、R);  ->  ->  WHILEsTempChdisnotnullDO  ->    SETsTemp=concat(sTemp,',',sTempChd);  ->    SELECTgroup_concat(id)INTOsTempChdFROMtreeNodeswhereFIND_IN_SET(pid,sTempChd)>0;  ->  ENDWHILE;  ->  RETURNsTemp;  ->END  ->//QueryOK,0rowsaffected(0.00sec)mysql>mysql>deli

91、miter;使用我们直接利用find_in_set函数配合这个getChildlst来查找mysql>selectgetChildLst(1);+-----------------+

92、getChildLst(1)  

93、+-----------------+

94、$,1,2,3,4,5,6,7

95、+-----------------+1rowinset(0.00sec)mysql>select*fromtreeNodes  ->whereFIND_IN_SET(id,getChildLst(1));+----+-------

96、---+------+

97、id

98、nodename

99、pid  

100、+----+----------+------+

101、  1

102、A      

103、  0

104、

105、  2

106、B      

107、  1

108、

109、  3

110、C      

111、  1

112、

113、  4

114、D      

115、  2

116、

117、  5

118、E      

119、  2

120、

121、  6

122、F      

123、  3

124、

125、  7

126、G      

127、  6

128、

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。