查询节点的所有父节点,按层级排序的存储过程
父子关系表结构:
`parentnode` int(11) ,-- 父节点
`node` int(11) , -- 节点
`isparent` int(11) -- 是否为父节点
drop PROCEDURE if EXISTS `getparentlst`;
DELIMITER //
CREATE PROCEDURE `getparentlst`(myid INTEGER)
begin
DECLARE sTemp INTEGER;
DECLARE sLevel INTEGER;
set sTemp=myid;
set sLevel=1;
CREATE TEMPORARY TABLE IF not EXISTS TEMP_父子关系表 (
`parentnode` int(11) ,-- 父节点
`node` int(11) , -- 节点
`isparent` int(11) , -- 是否为父节点
`level` int(11) -- 层级
)
ENGINE=MEMORY DEFAULT CHARSET=latin1 MAX_ROWS=10000;
WHILE sTemp<>0 do
insert into TEMP_父子关系表 SELECT t.parentnode,t.node,t.isparent,sLevel as `level` from viewparentchild t where node =sTemp and isparent=1;
select parentnode into sTemp from 父子关系表 where node =sTemp and isparent=1;
if(sTemp<>0) then
set sLevel = sLevel +1;
end if;
end WHILE;
select * from TEMP_父子关系表 view
order by view.level desc;
truncate table TEMP_父子关系表;
end;
//
分享到:
相关推荐
`createChildLst`存储过程利用了游标(cur1)遍历所有父节点为`rootId`的子节点,通过声明变量`done`和`CONTINUE HANDLER`来处理未找到记录的情况,即结束循环。对于每个找到的子节点,插入其信息到临时表`tmpLst`,...
MySQL 实现无限级分类是一种常见的数据库设计挑战,特别是在需要构建层级结构的数据模型时,例如网站导航菜单、组织架构或商品分类。以下将详细介绍三种常见的无限级分类实现方法,并分析其优缺点。 ### 1. 递归...
递归查询是一种在数据库中处理层次数据的方法,它通过自身调用来遍历层级结构。在菜单树场景中,每个菜单项可能有子菜单项,形成一种树状结构。通过递归查询,我们可以获取到所有级别的菜单项,包括它们的父级和子级...
3. 查询分类:可以通过比较左右值来获取指定范围内的所有子分类,或者查找某个节点的父节点、子节点、同级节点等。 4. 遍历分类:可以按照左值从小到大的顺序遍历整个分类树,实现层次结构的展示。 左右值法的优势...
5. **物质化路径**:物质化路径是一种存储每个节点完整路径的方法,例如使用斜杠分隔的父节点ID序列。虽然这简化了查询,但可能导致存储空间浪费,并且更新时需要维护路径的一致性。 6. **NLJ(Nested Loop Join)...
例如,一个地区表中,如果一个地区的父地区ID为空,那么这个地区就是顶层节点,其他地区则通过父地区ID关联到相应的父节点。 在实现树状菜单的过程中,PHP可能使用以下技术: 1. **预排序遍历树(Preorder ...
通过在数据表中存储每个节点的路径(例如,用逗号分隔的父节点ID),我们可以轻松地查询某个节点的所有祖先或后代。这种方法简单但可能导致数据冗余。 4. **预排序遍历树(Preorder Traversal Tree, PT)**: PT...
首先,我们需要一个包含层级关系的表格,例如名为`treenodes`的表格,包含字段`id`(节点ID)、`nodename`(节点名称)和`pid`(父节点ID)。为了演示递归查询,我们先创建这个表格并插入一些测试数据: ```sql ...
这种设计方式依赖于一个`parent_id`字段,每个节点存储其父节点的ID。在创建新节点时,`parent_id`指向其上级节点,`id`通常是自增的主键。例如,如果有一个树形结构,"Java"是"Language"的子节点,那么"Java"的`...
在这个例子中,`renderTree`函数接受一个菜单数组和父节点ID,然后遍历数组,找到所有父节点为指定ID的节点,并为它们生成HTML元素。对于每个节点,它还会递归地调用自身来处理该节点的所有子节点。 在实际应用中,...
MySQL则是一个关系型数据库管理系统(RDBMS),用于存储和管理网站的数据,包括无限分类的各个节点。为了实现无限分类,通常会在数据库中创建一个包含ID、名称、父分类ID等字段的表。父分类ID字段用于关联每个分类与...
- **数据库设计**:设计一个包含`id`(主键)、`name`(节点名称)、`parent_id`(父节点ID)等字段的表,通过`parent_id`字段实现层级关系。对于无限级联,可以使用自连接查询或者递归函数来获取所有子节点。 6. ...
可能需要一个包含节点ID、父节点ID、节点名称等字段的表,通过父子关系构建树形结构。 9. **JDBC**:Java Database Connectivity是Java与数据库交互的标准接口。在本项目中,开发者可能使用JDBC来连接和操作MySQL...
- 父节点或父节点:含有子节点的节点是其子节点的父节点。 - 子节点或孩子节点:节点的子树的根称为该节点的子节点。 - 兄弟节点:拥有相同父节点的节点互为兄弟节点。 - 节点的层次:根节点为第一层,其子节点为第...
在PHP和MySQL中实现无限分类是一项常见的任务,特别是在构建具有层级结构的数据模型时,例如商品分类、文章分类等。本文将介绍两种常见的方法,并探讨它们的优缺点。 **第一种方法:递归查询与数组处理** 这种方法...
递归查询可以从根节点开始,逐层遍历所有子节点。 2. **层次查询**:利用数据库的层级查询特性,如Oracle的`CONNECT BY`,来遍历整个菜单树。 3. **自连接查询**:通过多次自连接,每次查询一级子菜单,然后将结果...
- `parent_id`: 父节点ID,自关联到`node_id` - `node_name`: 节点名称,用于显示 - `other_columns`: 其他可能需要的属性,如URL、图标等 2. **查询无限级树**: 查询无限级树形菜单需要使用递归查询。在SQL中...
递归遍历数据,根据每个节点的上级ID找到其父节点,并将子节点添加到父节点的子节点列表中。 3. **深度优先搜索(DFS)与广度优先搜索(BFS)**:在操作树形结构时,这两种搜索算法十分常见。DFS常用于遍历整个树,...
一种常用的方法是使用自引用关系,即创建一个表格,其中每个记录都可能作为其他记录的父节点。例如,我们可以创建一个名为`Menu`的表,包含以下字段: 1. `Id`:主键,唯一标识菜单项,通常为整数类型。 2. `Name`...
这个技术基于数学理论中的“二叉搜索树”(Binary Search Tree),通过两个额外的字段(通常称为`lft`和`rgt`)来存储每个节点的左右边界,从而实现对层级数据的快速查询和操作。 嵌套集的主要优势在于其灵活性和性能...