递归 删除层级记录

【项目问题总结】5:树形结构节点的级联删除逻辑 问题描述:         改Bug改到机构类型管理模块的时候,有一个非常常见的问题出现,如下图所示:         当用户在进行删除操作的时候,如果将树形结构的中间节点删除,整个页面的数据就消失了,比如将上图中的名称为“学院”的这个节点删除,那么整个树形结构的数据都没了,这是一个很明显的Bug。   问题分析:         对于这样一个这么明显的Bug,什么原因造成的?一 阅读详情

PrimaryKey    UpLevelCompCode   UpLevelCompName   CurrentLevelCompCode    CurrentLevelCompName    CurrentLevel
1                           0                             0                             NULL                                    NULL                        0
2                           0                             0                                 1                                      1                              1
3                           0                             0                                 2                                      2                              1
4                           1                             1                                 3                                      3                              2
5                           1                             1                                 4                                      4                              2
6                           3                             3                                 5                                      5                              3
7                           3                             3                                 6                                      6                              3

//递归 删除层级记录
public static void Delete(string code,int level,string sign)
{
    if(level>0)
    {
    System.Data.DataSet ds = bll.SelectDepartLevelMaintainByFilter(" and "+sign+" = '"+code+"' and CurrentLevel="+level);
    if(ds!=null)
    {
        if(ds.Tables[0]!=null)
        {
            if(ds.Tables[0].Rows.Count>0)
            {
                foreach(System.Data.DataRow dr in ds.Tables[0].Rows)
                {
                    string _code = dr["CurrentLevelCompCode"].ToString().Trim();
                    int _level = Convert.ToInt32(dr["CurrentLevel"].ToString().Trim());
                    long _pk = Convert.ToInt64(dr["PrimaryKey"].ToString().Trim());
                    Delete(_code,_level+1,"UpLevelCompCode");
                    bll.DeleteDepartLevelMaintain(_pk);
                }
            }
        }
    }
   }
}
DepartLevelMaintainBLL bll = new DepartLevelMaintainBLL ();
System.Data.DataRow dr = bll.SelectDepartLevelMaintainByFilter(" and PrimaryKey = "+2).Tables[0].Rows[0];
string _code = dr["CurrentLevelCompCode"].ToString().Trim();
int _level = Convert.ToInt32(dr["CurrentLevel"].ToString().Trim());
TestMethod.Delete(_code,_level,"CurrentLevelCompCode");

 

实际上可以将CurrentLevel可以设计成有层级的值,这样删除的时候根据条件删除就可以了。

如:

CurrentLevel
00
001
002
00101
00102
0010101
0010102

字段设计成这样删除时就不用使用层级查找了。直接SUBSTRING(.....)=.....就可以了。

CXL Virtual Hierarchy (VH) Enumeration理解 在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。 阅读详情

相关推荐

飞书应用开发脚手架lark-harness:从零构建企业级机器人

在构建企业级应用时,开发脚手架是提升工程效率和规范性的关键工具。其核心原理在于通过预设的项目模板、最佳实践和通用模块封装,自动化处理项目初始化、配置管理和基础架构搭建。这种技术价值在于将开发者从重复性劳动中解放出来,确保团队技术栈统一,并降低维护成本。在Node.js生态中,脚手架常与Express或Koa等Web框架结合,用于快速构建Web服务、API接口和实时事件处理系统。具体到飞书开放平台开发场景,开发者需要处理OAuth 2.0授权、事件订阅验证、消息加解密等复杂且标准的流程。lark-harnes

weixin_30703911的博客 612

关于菜单删除问题,当父级菜单选中,对应删除所有的子集菜单(能力有限,这里只写到了三级菜单)

对应的数据库的表 对应的菜单表 其中七张表的总体关系 这里我们通过字段level来判断是否是1\2\3级菜单 前端传递过来的id 第一步:我们先通过id来查找对应的菜单的等级 前端传过来的id有可能是1/2/3级别 等级为3直接删除 等级为2,先删除3再删2 等级为1先删除3再用等级二的方法 我们通过level和parentMenuId <!--查找菜单等级--> <select id="findLevel" resultType="java.lang.Integer"&g

QiYang1024的博客 1651

Android 13/14/15 默认授权应用权限的实现方法

Android版本修改方式实现原理13/14修改Permission.java将所有权限标记为Normal权限15修改DeviceIdleController.java + DefaultPermissionGrantPolicy.java监听应用安装并主动授权。

m0_60898338的博客 2911

SQL查询父类顶级与子级,删除父类顶级,子级也删除

表大致结构: id name   pid

Jews 3504

51单片机矩阵键盘——LCD1602显示

矩阵键盘扫描(输入扫描) 原理:读取第1行(列)→读取第2行(列) →读取第3行(列) → ……,然后快速循环这个过程,最终实现所有按键同时检测的效果 在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式采用逐行或逐列的“扫描”,就可以读出任何位置按键的状态。

YLG_lin的博客 9853

ads设计Doherty功放(1)

Doherty功放的设计

qq_40995480的博客 2万+

递归删除(自上而下删)---laravel 静态方法

//定义一个静态方法 public static function del($id) { $document = Document::find($id); if (!$document) { return false; } $documentOne = Document::where('parent_id', $id)->get(); if

Mr__Ming(QQ:1178889246)的博客 625

Unity Shader Graph 2D - Procedural程序化图形转动的环状六边形

Hexagon又称六边形,在游戏中是十分常见的基础形状,本文将使用程序化的六边形来制作多个环状六边形叠加的转动动画效果,实践Unity Shader Graph中的常用节点功能。

Giver的博客 1928

递归:删除中的循环递归说明

典型应用:收藏夹删除,文件夹删除,产品类别删除,站点类别删除等。 达到要求:在删除当前记录的时候,判断是否存在子级记录,如果存在也要级联删除,循环判断只到将该记录下的所有子级记录全部删除为止。 数据表设计特点:任何表的设计都以ID为标示列,如果设计上下级关系的表,那么存在一个parent_id(上级ID)列 数据表结构举例: 中国(00) 湖南(00 01) 长沙市...

simpledev 414

三相电机控制入门:端电压、相电压、线电压到底怎么测?(附实测波形对比)

本文为三相电机控制初学者提供了端电压、相电压和线电压的完整测量指南。通过厘清三者的物理定义与测量方法,详细讲解了如何搭建虚拟星形点电路,并对比分析了方波、SPWM和SVPWM三种主流控制模式下关键电压波形的核心特征与差异,帮助工程师掌握正确的示波器测量与波形解读技巧。

oauth7security的博客 650

PHM2010刀具磨损预测完整实现

本文介绍了PHM2010刀具磨损预测项目的完整实现方案。项目采用PHM2010公开数据集,包含6个子数据集,记录了铣削加工过程中7个通道的传感器数据(切削力、振动和声发射信号)。技术路线包括数据预处理(截取中间10万点、小波降噪)、特征提取(时域9个、频域4个特征)、特征融合和皮尔逊相关系数筛选,最终使用BiLSTM模型进行训练和评估。环境配置基于Python 3.9,依赖NumPy、Pandas、PyTorch等库。数据加载和预处理阶段重点处理了传感器信号分段和磨损标签对齐问题,为后续建模奠定基础。

huanghm88的专栏 419

利用递归级联删除的代码

级联树状结构,删除的时候,需要一级一级查找,并一级级删除操作,如此反复操作,需要不断调用同一个函数,所以这里使用递归操作十分方便 递归函数需要单独书写,并在方法中调用。 以下示例代码,为一个级联删除,有个父id 然后不断查找其子id 并删除 通过子id 继续查找其id的子id 删除,由于多语句操作,所以使用了事物手动提交方式 (其中处理异常方式不严谨!!) /** * 级联...

weixin_30266829的博客 248

YOLOv12改进策略【Head】| ASFF 自适应空间特征融合模块,改进检测头Detect_ASFF

在目标检测中,处理多尺度物体是一个具有挑战性的问题。虽然特征金字塔或多级特征塔是解决多尺度问题的常用方法,但在单阶段检测器中,不同尺度特征之间的不一致性限制了其性能提升。为了解决这个问题,提出了自适应空间特征融合(ASFF)模块。

Limiiiing的博客 1171

删除文件夹中所有文件

package com.liu.IO; import java.io.File; import java.util.ArrayList; import java.util.List; /**  * 删除目录中所有的文件  * @author liu  *  */ public class Test4 { //存放文件信息的集合 static List list

u011513914的专栏 569

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SQL server递归获取部门信息以及数据库表优化设计

预设条件:公司下设置三级部门信息,部门表Department字段设计如下,其中有四个字段(公司ID未体现): id:部门ID,自增主键;            name:部门名字;            parentId:父级部门ID;            deleted:是否删除,0未删除,1已删除。 现在要删除部门信息,可以想到在删除部门信息的时候,如果删除的是一级部门,那么它下面的二级...

wangruoao的博客 1404

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

存储过程来实现递归查找节点

表结构如下: 查找所有节点用来删除: create PROCEDURE UserClassDeleteAllNodeUsedProcedure @ClassID nchar(10) AS declare @id int set @id=@ClassID; with RootNodeCTE(id,ParentID) as ( Select ClassID,Par...

weixin_33800593的博客 101

删除某单级文件夹下所有具有单级继承关系的文件夹

import java.io.File; //删除某单级目录下所有继承性目录,该路径没文件,只有文件夹; //File类的删除方法delete()只能删除空文件夹 //如 D:\\ec\\新建文件夹\\workbench\\workbench\\workbench\\workbench\\w...

chengmotao6370的博客 154

php删除文件的指定内容,php 删除指定文件夹的实例讲解

1、前言目标:php删除一个指定目录所使用的的php函数:is_dir,opendir,readdir,scandir,rmdir,closedir,等等(注:其他文件操作函数也可以完成,这里只列举了本次使用的函数)2、相关函数介绍php文件操作的方法大致相同,已经在上一篇介绍过了,这里就不在重复介绍,这里就介绍一个新函数rmdir详情参考:http://www.w3school.com.cn/p...

weixin_32154109的博客 186

with recursive递归函数用法

SQL编写递归树

weixin_41087144的博客 1722

mysql 在行中查找,如何在MySQL中查找所有子行?

I have a hierarchy system setup that stores the level and parent ID of the item in a database. What I am trying to figure out is how would I go about finding all the child rows of the one the user sel...

weixin_36049771的博客 102

Oracle 存储过程中多层嵌套游标的用法

[code="Oracle sql脚本"] CREATE OR REPLACE PROCEDURE P_DELETE_QK (pId in NUMBER, deep in NUMBER) AS -- pId = 分类ID deep = 深度,层级 one_val NUMBER; two_val NUMBER; three_val NUMBER; cursor var_one is ...

IT程序员 992

谷粒商城三级分类拖拽bug记录

bug记录57集 三级分类菜单无法拖动的问题 57集 三级分类菜单无法拖动的问题 修改countNodeLevel方法 添加 this.maxLevel = node.level; countNodeLevel(node) { //找到所有子节点,求出最大深度 if (node.childNodes != null && node.childNodes.length > 0) { this.maxLevel = node.level;

BTLord的博客 377

如何过滤数组对象和子节点对象中某一属性不符合条件的

tableData:[],//过滤后的数据 datalist:[//过滤前的数据 {name:'chen',age:'18',address:'1',id:'1',delete:false, edit:false,child:[{name:'chen1',delete:false,address:'12',age:'18',child:[]}]}, {name:'chen',a...

weixin_30426957的博客 849

根据每次选择文件夹来在后台创建数据库表,并批量新增数据

    前面弄的是上传,现在是需要根据每次选择文件夹来在后台创建数据库表,并批量新增数据,因为我是根据文件夹来递归的,所以有这样的//使用递归上传脚本到服务器 private void uploadScript(File file){ num++; File[] files = file.listFiles(); for(int i=0;i&lt;files.length;...

人总是说往前看,为什么我们不能往后看? 454

linux-learning-progress

Linux命令学习复盘摘要 今日掌握了13个基础Linux命令,包括目录操作(mkdir,cd)、文件操作(cp,rm)和查看命令(cat,head)。学习进度显示已掌握13/40+命令,重点理解了目录层级、路径概念和递归操作。明日计划优先学习高频命令grep和find,建议建立练习目录进行实践。特别提醒rm命令不可恢复,使用需谨慎。学习策略建议结合已学命令练习新内容,逐步构建完整的Linux操作能力。

m0_63137338的博客 47

php mysql 一级分类_php+mysql实现无限级分类

项目思路分析:一个PHP项目要用到分类,但不确定分几级,所以就想做成无限级分类。一开始想是按以前一样,数据库建4个值,如下:id: 自增 | pid: 父类ID | xid: 排序ID | classname: 分类名称后来想到这种在读取数据时和修改时比较不方便,而且在产品读取时尤其不便,于时改成了以下的方案:在Mysql的表中新增了一个字段,现数据库如下:表名 w_faqcl...

weixin_39581719的博客 128
上一篇: Cost Readonly Static关键字简单比较
下一篇: 递归绑定数据到treeview
andycode
博客等级 码龄17年 12粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值