MySQL中可以使用遞歸遍歷樹狀結(jié)構(gòu),通過遞歸調(diào)用子查詢來實現(xiàn)。
-- 創(chuàng)建一個示例表格 CREATE TABLE tree ( id INT PRIMARY KEY, parent_id INT, name VARCHAR(255) ); -- 插入數(shù)據(jù) INSERT INTO tree VALUES (1, NULL, 'root'), (2, 1, 'child1'), (3, 1, 'child2'), (4, 2, 'grandchild1'), (5, 2, 'grandchild2'), (6, 3, 'grandchild3'), (7, 6, 'great-grandchild1'); -- 定義遞歸函數(shù) DELIMITER $$ CREATE FUNCTION get_tree_path(_id INT) RETURNS VARCHAR(255) DETERMINISTIC BEGIN DECLARE _parent_id INT; DECLARE _name VARCHAR(255); DECLARE _path VARCHAR(255); SELECT parent_id, name INTO _parent_id, _name FROM tree WHERE id = _id; IF _parent_id IS NULL THEN -- 如果是根節(jié)點 RETURN _name; ELSE -- 如果不是根節(jié)點 SET _path = CONCAT(get_tree_path(_parent_id), ' >', _name); RETURN _path; END IF; END $$ DELIMITER ; -- 查詢樹狀結(jié)構(gòu) SELECT id, get_tree_path(id) AS path FROM tree;
以上代碼中,通過定義遞歸函數(shù)get_tree_path(),可以查詢出每個節(jié)點的完整路徑。通過調(diào)用子查詢,可以遞歸查詢出整個樹狀結(jié)構(gòu)。