在處理樹狀結構數據時,經常需要查詢每個節點的最上層父節點,MySQL可以通過遞歸查詢實現該功能。
假設有如下的樹狀結構表:
CREATE TABLE tree (
id INT PRIMARY KEY,
parent_id INT,
name VARCHAR(20)
);
INSERT INTO tree VALUES
(1, null, 'A'),
(2, 1, 'B'),
(3, 2, 'C'),
(4, 2, 'D'),
(5, 1, 'E'),
(6, 5, 'F'),
(7, 5, 'G');
首先,需要創建一個遞歸函數,用于不斷地向上查找父節點:
DELIMITER $$
CREATE FUNCTION find_top(id INT) RETURNS INT
BEGIN
DECLARE current_id INT;
SET current_id = id;
WHILE current_id IS NOT NULL DO
SET id = current_id;
SELECT parent_id INTO current_id FROM tree WHERE id = current_id;
END WHILE;
RETURN id;
END $$
DELIMITER ;
該函數接受一個整數參數,表示當前節點的ID,每次循環中將該節點的父節點查詢出來,直到找到最上層的父節點返回。
接下來,可以使用以下語句查詢樹狀結構表中每個節點的最上層父節點:
SELECT id, name, find_top(id) AS top_id FROM tree;
運行結果如下:
+----+------+--------+
| id | name | top_id |
+----+------+--------+
| 1 | A | 1 |
| 2 | B | 1 |
| 3 | C | 1 |
| 4 | D | 1 |
| 5 | E | 5 |
| 6 | F | 5 |
| 7 | G | 5 |
+----+------+--------+
從結果可以看出,每個節點的最上層父節點都被正確地查出來了。
上一篇css3class圖標
下一篇css3div邊框動畫