欢迎来到天天文库
浏览记录
ID:38189114
大小:43.50 KB
页数:9页
时间:2019-06-07
《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、
此文档下载收益归作者所有