MySQL递归查询父节点的层次递归查询函数可以使用WITH RECURSIVE
语句来实现,下面是一个详细的示例,包括小标题和单元表格:
1、创建测试表结构
CREATE TABLEtest_tree
(id
int(11) NOT NULL AUTO_INCREMENT,name
varchar(255) NOT NULL,parent_id
int(11) DEFAULT NULL, PRIMARY KEY (id
), KEYparent_id
(parent_id
) ) ENGINE=InnoDB;
2、插入测试数据
INSERT INTOtest_tree
(name
,parent_id
) VALUES ('A', NULL), ('B', 1), ('C', 1), ('D', 2), ('E', 2), ('F', 3), ('G', 4);
3、使用递归查询父节点层次
WITH RECURSIVE cte AS ( SELECT id, name, parent_id, 1 AS level FROM test_tree WHERE parent_id IS NULL UNION ALL SELECT t.id, t.name, t.parent_id, cte.level + 1 FROM test_tree t INNER JOIN cte ON t.parent_id = cte.id ) SELECT * FROM cte;
这个查询将返回以下结果:
id | name | parent_id | level |
1 | A | NULL | 1 |
2 | B | 1 | 2 |
3 | C | 1 | 2 |
4 | D | 2 | 3 |
5 | E | 2 | 3 |
6 | F | 3 | 3 |
7 | G | 4 | 3 |
在这个例子中,我们首先定义了一个名为cte
的公共表表达式(CTE),它包含两个部分:基本查询和递归查询,基本查询从根节点(没有父节点)开始,递归查询则通过连接当前级别的节点与其父节点来获取下一级节点,我们从CTE中选择所有记录以显示层次结构。
最新评论
本站CDN与莫名CDN同款、亚太CDN、速度还不错,值得推荐。
感谢推荐我们公司产品、有什么活动会第一时间公布!
我在用这类站群服务器、还可以. 用很多年了。