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 twhere t.parent_id = 4
union allselect
GROUP_CONCAT(tr.id) idsfrom 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更加锋利高效。