insert into t_test(id,name,parentid)value('1','一级菜单','0');
insert into t_test(id,name,parentid)value('11','二级菜单','1');
insert into t_test(id,name,parentid)value('111','三级菜单','11');
insert into t_test(id,name,parentid)value('2','一级菜单','0');

根据子节点查找所有父级节点

select 
	@r as _id,
	(select name from t_test where id = _id) as name,
	(select @r := parentid from t_test where id = _id) as parentid
	(select @r := '111') temp,t_test a
	where @r!=0

1、表关联时包含所有记录(没有关联条件)

2、遍历表关联结果集时,第一次@r='111',通过【    (select @r := parentid from t_test where id = _id) as parentid 】子查询将@r := parentid,所以当进行第二次时,@r=‘11’,依次类推,最后通过 @r != 0 进行过滤

在 SQL Server 中,使用 CTE 表达式很容易做到无限层次父子关系查询;在不支持CTE表达式的版本中,借助函数递归也可以轻松实现。 在 MySQL 中,这个需求的实例稍显复杂, MySQL 中没有支持递归的查询,没有表值函数,函数不支持递归,所以通常都是用循环实现,显得比较别扭。今天看到一个用单条语句实现的递归查询,想法独特,分享一下。 表结构和数据 CREATE TABLE table1(id int, name varchar(10), parent_id int); INSERT table <meta charset="utf-8"> <title>copyright by leiflyy--leiflyy@outlook.com--</title> <script src="js/ionic.bundle. `id` int(11) NOT NULL AUTO_INCREMENT, `pid` int(11) DEFAULT NULL, `tname` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT ... FROM ( SELECT @r AS id, (SELECT @r := parent_id FROM department WHERE id = @r) AS tmp_parent_id FROM (SELECT @r := 9) leafNodeId, department hd) d2 INNER JOIN department d3 ON d2.id = d3.id AND d2.tmp_parent_id is not null 1、可以使用类似Java这种面向对象的语言,对 节点 集合进行逻辑处理,获取 父节点 。 2、直接自定义 MySQL 函数getParentNodeList,通过一层while循环,实现对指定 节点 的所有父 子节点 进行查询。 1、创建数据表 1)表结构截图如下(此处简单建一张表t_tre...