树形结构根据某节点查询本节点及下属所有子节点的递归实现

数据表中CompanyId,ParentCompany,有层级关系,树形结构根据某节点查询本节点及下属所有子节点的递归实现如下:

        public string ids = "";

        /// <summary>
        /// 根据CompanyId 查找到子单位id
        /// </summary>
        /// <param name="companyId"></param>
        /// <returns></returns>
        private string GetCompanysIds(string CompanyId)
        {
            StringBuilder strSqlcode = new StringBuilder();
            strSqlcode.Append(" select * from SystemCompany where CompanyId = @CompanyId ");
            SqlHelper<SystemCompany> sqlHelpercode = new SqlHelper<SystemCompany>();
            Dictionary<string, object> parameterscode = new Dictionary<string, object>();
            parameterscode.Add("@CompanyId", CompanyId);
            SystemCompany systemcompany = sqlHelpercode.FindModel(strSqlcode.ToString(), parameterscode);
            string s = systemcompany.CompanyId;
            string CompanysIds = GetsIds(s, systemcompany.CompanyId);
            return CompanysIds;
        }

        private string GetsIds(string s, string CompanyId)
        {
            List<string> companyids = new List<string>();
            StringBuilder strSqlcode = new StringBuilder();
            strSqlcode.Append(" select * from SystemCompany where ParentCompany = @ParentCompany ");
            SqlHelper<SystemCompany> sqlHelpercode = new SqlHelper<SystemCompany>();
            Dictionary<string, object> parameterscode = new Dictionary<string, object>();
            parameterscode.Add("@ParentCompany", CompanyId);
            List<SystemCompany> systemcompany = sqlHelpercode.Find(strSqlcode.ToString(), parameterscode);
            if (systemcompany.Count > 0)
            {
                foreach (var item in systemcompany)
                {
                    s = s + ";" + item.CompanyId;
                    ids = s;
                    GetsIds(s, item.CompanyId);
                }
            }
            else
            {
                ids = s;
            }

            return ids;
        }

向上查找同理

原文地址:https://www.cnblogs.com/yangwujun/p/9224377.html

时间: 2024-08-28 17:55:07

树形结构根据某节点查询本节点及下属所有子节点的递归实现的相关文章

YbSoftwareFactory 代码生成插件【十八】:树形结构下的查询排序的数据库设计

树形结构的排序在中国特色下十分普遍也非常重要,例如常说的五大班子,党委>人大>政府>政协>纪委,每个班子下还有部门,岗位,人员,最终排列的顺序通常需要按权力大小.重要性等进行排列,顺序排列不好可是重大的罪过,领导很生气,后果很严重.这种排序方式本质上就是典型的树形结构深度排序,但在数据库中很难直接通过SQL语句简单高效地进行处理,更不用说还要支持不同类型数据库了. 当前解决此类问题,主要有两种方法. 1. 排序码方式 原理:在每个树形节点上均设置一个排序码,排序码通常是一个字符串并

「SQL归纳」树形结构表的存储与查询功能的实现——通过路径方法(非递归)

一.树形结构例子分析: 以360问答页面为例:http://wenda.so.com/c/ 我们通过观察URL,可以明确该页面的数据以树形结构存储,下面三块模块分别为: ①根节点 ②根节点的第一层子节点 ③为左侧所选择节点的下一层子节点 (图1) 该例简化的树形结构图如下: (图2) 我们不难发现,每当点击图1红框内的类别时,页面主体问题部分会显示该类别节点下所有子节点的问题.因此,需要实现查询出某节点所有子节点的功能. 二.表的存储: 需要存储两张表: 1.类别表 create table [

树形结构表的存储【转自:https://www.cnblogs.com/Tjna/p/9026980.html】

一.树形结构例子分析: 以360问答页面为例:http://wenda.so.com/c/ 我们通过观察URL,可以明确该页面的数据以树形结构存储,下面三块模块分别为: ①根节点 ②根节点的第一层子节点 ③为左侧所选择节点的下一层子节点 (图1) 该例简化的树形结构图如下: (图2) 我们不难发现,每当点击图1红框内的类别时,页面主体问题部分会显示该类别节点下所有子节点的问题.因此,需要实现查询出某节点所有子节点的功能. 二.表的存储: 需要存储两张表: 1.类别表 create table [

salesforce 零基础学习(七十)使用jquery tree实现树形结构模式

项目中UI需要用到树形结构显示内容,后来尽管不需要做了,不过还是自己做着玩玩,mark一下,免得以后项目中用到. 实现树形结构在此使用的是jquery的dynatree.js.关于dynatree的使用可以参考:http://wwwendt.de/tech/dynatree/doc/dynatree-doc.html#h4.2 对于树形结构,这里不做太多介绍,树一般需要一个根节点,根节点下面可以有很多子节点或者叶子节点,子结点也可以包含叶子结点或者子节点.我们在设计表结构的时候可以考虑自连接操作

[从产品角度学EXCEL 02]-EXCEL里的树形结构

这是<从产品角度学EXCEL>系列第三篇. 前言请看: 0 为什么要关注EXCEL的本质 1 excel是怎样运作的 或者你可以去微信公众号@尾巴说数 获得连载目录. 本文仅由尾巴本人发布于特定网站.不接受任何无授权转载,如需转载,请先联系我,非常感谢. 2 EXCEL里的树形结构 这段时间,上海街边的树上陆陆续续长出了嫩芽,放眼望去有各种层次的绿色,格外好看.我们今天的话题,恰好也与树有关.只不过,树都是往天空伸展枝叶的,而我们这里讨论的‘树’,却是由根部出发,逐行逐行往下延展.伸展. 还记

添加文件夹获得其树形结构,并构建其节点

定义文件信息 public class MyFileInfo { public string FileName { get; set; }//文件名 public string FilePath { get; set; }//文件路径 public long FileSize { get; set; }//文件大小 public string ParentPath { get; set; }//父路径 public string RelativePath { get; set; }//相对路径

设计与实现的简单和经常使用的权限系统(五岁以下儿童):不维护节点的深度level,手工计算level,树形结构

以这种方式.和第三的类似介绍.所不同的是.深度未在数据库中存储节点level,添加和更改时间,护.而是,在程序中,实时去计算的. 至于后面的,依照level升序排序,再迭代全部的节点构造树,与第三篇中的方法,全然一样.因此,本篇和下一篇,仅仅介绍怎样计算level.不再介绍后面的详细实现了. 计算level,採用递归方式. // 计算全部节点的level public static List<Map<String, Object>> caculateLevel( List<M

递归、嵌套for循环、map集合方式实现树形结构菜单列表查询

有时候, 我们需要用到菜单列表,但是怎么样去实现一个菜单列表的编写呢,这是一重要的问题. 比如我们需要编写一个树形结构的菜单,那么我们可以使用JQuery的zTree插件:http://www.treejs.cn/v3/main.php#_zTreeInfo 例如现在需要编写一个这样的菜单列表.那么就可以使用JQuery的zTree插件. 先看一下数据库表结构. CREATE TABLE `permission` ( `id` int(11) NOT NULL AUTO_INCREMENT, `

一次完成对多个子节点的全部父级节点查询

大家在做项目的时候,展示树形结构的数据,肯定遇到需要通过父节点递归查询所有子节点的情况, 也应该做过通过子节点查询所有父级节点的需求. 本次遇到的需求是一次性查询多个子节点的所有父级节点的情况. 多个节点我们考虑到要去除重复节点. 常规做法: 1. 数据库中写一个自定义函数,查询当前节点的所有父级节点 DROP FUNCTION if EXISTS fn_getParentNodes; CREATE FUNCTION fn_getParentNodes(currentId VARCHAR(64)