MySQL实现获取父节点数据的递归查询(mysql递归查询父节点)

MySQL实现获取父节点数据的递归查询

MySQL(Structured Query Language,结构化查询语言)是一种关系型数据库管理系统,是开源的,在 Web 应用中十分流行。本文将讨论如何使用 MySQL 实现获取父节点数据的递归查询。

我们先来看一个例子,假设有一张表用来存储节点之间的关系:

create table tbl_relationship_node
(
id int,
parent_id int
);
insert into tbl_relationship_node values(1,0);
insert into tbl_relationship_node values(2,1);
insert into tbl_relationship_node values(3,2);
insert into tbl_relationship_node values(4,3);

tbl_relationship_node表中存储了几条节点ID间的关系,以节点ID为 4 为例,它的父节点 ID 依次为 3,2,1,0,它们组成了一个节点\ parent_id 关系链(链条)4->3->2->1->0。

要实现如上的节点关系查询,可以使用MySQL的递归查询,采用基于触发器和非联接结果集方式实现:

delimiter $$ 

create trigger trg_recursive_query
before insert
on tbl_relationship_node
for each row
begin
set @parent_id := (select parent_id from tbl_relationship_node where id = new.id limit 1);

if @parent_id 0 then
insert into tbl_relationship_node(id, parent_id) values(new.id, @parent_id);
end if;
end$$
delimiter ;

select
GROUP_CONCAT(t.id) ids
from tbl_relationship_node t
where t.parent_id = 4
union all
select
GROUP_CONCAT(tr.id) ids
from tbl_relationship_node tr
where tr.parent_id in
(select t.id
from tbl_relationship_node t
where t.parent_id = 4
)
;

上面的SQL语句在MySQL中会产生一个可以按照不断递归的方式获取父节点ID的结果集,就像一条链条一样,比如4->3->2->1->0。

本文介绍了如何使用MySQL实现递归查询来获取父节点数据。此外,MySQL还有其他功能强大的查询,建议使用者仔细学习和研究使得MySQL更加锋利高效。


数据运维技术 » MySQL实现获取父节点数据的递归查询(mysql递归查询父节点)