本文目錄一覽:
mysql遞歸查詢語句
mysql遞歸查詢,mysql中從子類ID查詢所有父類(做無限分類經常用到)
由於mysql 不支持類似 oracle with …connect的 遞歸查詢語法
之前一直以為類似的查詢要麼用存儲過程要麼只能用程序寫遞歸查詢.
現在發現原來一條sql語句也是可以搞定的
先來看數據表的結構如下:
id name parent_id
—————————
1 Home 0
2 About 1
3 Contact 1
4 Legal 2
5 Privacy 4
6 Products 1
7 Support 1
我要的要求是根據一個分類ID(這個分類ID可能是一個子分類),得到所有的父分類,下面是相應的SQL:
SELECT T2.id, T2.name
FROM (
SELECT
@r AS _id,
(SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
@l := @l + 1 AS lvl
FROM
(SELECT @r := 5, @l := 0) vars,
table1 h
WHERE @r 0) T1
JOIN table1 T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC
代碼@r := 5標示查詢id為5的所有父類。結果如下
1, 『Home』
2, 『About』
4, 『Legal』
5, 『Privacy』
自己仿照這看一下!
mysql查詢一個表,實現遞歸查詢
給你個網上寫的比較好的例子:
方法一:利用函數來得到所有子節點號。
創建一個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,
rows
affected
(0.00
sec)
mysql
mysql
delimiter
;
使用我們直接利用find_in_set函數配合這個getChildlst來查找
mysql
select
getChildLst(1);
+—————–+
|
getChildLst(1)
|
+—————–+
|
$,1,2,3,4,5,6,7
|
+—————–+
1
row
in
set
(0.00
sec)
mysql
select
*
from
treeNodes
–
where
FIND_IN_SET(id,
getChildLst(1));
+—-+———-+——+
|
id
|
nodename
|
pid
|
+—-+———-+——+
|
1
|
A
|
|
|
2
|
B
|
1
|
|
3
|
C
|
1
|
|
4
|
D
|
2
|
|
5
|
E
|
2
|
|
6
|
F
|
3
|
|
7
|
G
|
6
|
+—-+———-+——+
7
rows
in
set
(0.01
sec)
mysql
select
*
from
treeNodes
–
where
FIND_IN_SET(id,
getChildLst(3));
+—-+———-+——+
|
id
|
nodename
|
pid
|
+—-+———-+——+
|
3
|
C
|
1
|
|
6
|
F
|
3
|
|
7
|
G
|
6
|
+—-+———-+——+
3
rows
in
set
(0.01
sec)
MySQL怎樣做遞歸查詢
mysql的逆襲:如何做遞歸層次查詢
最近在做一個從oracle資料庫到mysql資料庫的移植,遇到一個這樣的問題
在Oracle 中我們知道有一個 Hierarchical Queries 通過CONNECT BY 我們可以方便的查了所有當前節點下的所有子節點。但shi,在MySQL的目前版本中還沒有對應的函數!!!
換句話來說,想要用mysql實現遞歸查詢,根本做不到!!!
可是經過我數天茶不思飯不想的刻苦琢磨,終於想到了一個合理的,適用於mysql和其他sql的解決方案。
方案一出,就秋風掃落葉之勢,席捲整個dao層~~~所到之處,所有問題迎刃而解,讓所有問題都不再為問題 都成為了我這個函數的炮灰而已。。。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303433.html