总结,简单的树结构递归。

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dds= new DataTable(); //id,Title
                creattree(Treeview1.Nodes, dds);
            }
        }
        public void creattree(TreeNodeCollection tnc, DataTable dt)
        {
            TreeNode tn;
            if (dt.Rows.Count > 0) //如果有数据
            {
                for (int i = 0; i < dt.Rows.Count; i++) //遍历数据
                {
                    tn = new TreeNode(); //实例化Tn
                    tn.Text = dt.Rows[i]["colname"].ToString();//Tree显示的文本
                    tn.Value = dt.Rows[i]["id"].ToString();   //Tree的值
                    tn.SelectAction = TreeNodeSelectAction.Expand; //点击触发的事件
                    tnc.Add(tn); //添加子栏目
                    DataTable dts = new DataTable(); //判断(获取上面的id)
                    if (dts.Rows.Count > 0) //如果有子id
                    {
                            creattree(tn.ChildNodes, dts);//执行Creattree
                    }
                }
            }
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/** * 根据等级查询类目 * * @param level * @return */ @Override public List queryCategoryTree(Integer level) { //查询当前级别下类目 List list = categoryDAO.list(level); //组装好的类目,返回前端 List categoryTree = new ArrayList(); //所有类目 List allDTOList = new ArrayList(); if (CollectionUtils.isEmpty(list)) { return categoryTree; } for (CategoryDO categoryDO : list) { allDTOList.add(new CategoryTreeDTO().convertDOToDTO(categoryDO)); } //当前等级类目 categoryTree = allDTOList.stream().filter(dto -> level.equals(dto.getLevel())).collect(Collectors.toList()); for (CategoryTreeDTO categoryTreeDTO : categoryTree) { //组装类目为树结构 assembleTree(categoryTreeDTO, allDTOList,Constants.CATEGORY_MAX_LEVEL - level); } return categoryTree; } /** * 组装 * * @param categoryTreeDTO * @param allList * @param remainRecursionCount 剩余递归次数 * @return */ public CategoryTreeDTO assembleTree(CategoryTreeDTO categoryTreeDTO, List allList, int remainRecursionCount) { remainRecursionCount--; //最大递归次数不超过Constants.CATEGORY_MAX_LEVEL-level次,防止坏数据死循环 if(remainRecursionCount < 0){ return categoryTreeDTO; } String categoryCode = categoryTreeDTO.getCategoryCode(); Integer level = categoryTreeDTO.getLevel(); //到达最后等级返回 if (Constants.CATEGORY_MAX_LEVEL == level) { return categoryTreeDTO; } //子类目 List child = allList.stream().filter(a -> categoryCode.equals(a.getParentCode())).collect(Collectors.toList()); if (null == child) { return categoryTreeDTO; } categoryTreeDTO.setChildren(child); //组装子类目 for (CategoryTreeDTO dto : child) { assembleTree(dto, allList,remainRecursionCount); } return categoryTreeDTO; }
### 回答1: 实现 MySQL 多表形结构递归可以采用以下步骤: 1. 创建一个包含父级ID的表,用于存储形结构数据。 2. 在表中插入数据,并且每个数据项都有一个父级ID。 3. 使用递归查询获取形结构数据。 以下是一个示例 SQL 代码,用于实现 MySQL 多表形结构递归: ``` WITH RECURSIVE cte AS ( SELECT id, name, parent_id, 0 AS depth FROM category WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, depth + 1 FROM category c JOIN cte ON c.parent_id = cte.id ) SELECT id, name, parent_id, depth FROM cte; ``` 在上面的 SQL 代码中,我们使用了递归查询 (WITH RECURSIVE) 和联结 (JOIN) 的方式获取形结构数据。其中,第一条 SELECT 语句用于获取根节点,即 parent_id 为 NULL 的数据项。随后,我们使用 UNION ALL 和 JOIN 语句来获取形结构的各个节点。 最终,我们可以获取到一个包含 id、name、parent_id 和 depth 的形结构数据。其中,id 表示节点的唯一标识符,name 表示节点的名称,parent_id 表示节点的父级ID,depth 表示节点的深度。 ### 回答2: MySQL多表形结构递归实现是指使用多个表来构建一个形结构,并通过递归方式来查询和操作这个形结构。 在MySQL中,我们可以通过以下步骤来实现多表形结构的递归查询: 1. 创建表格:首先,我们需要创建一个或多个表格来存储形结构的数据。一般来说,这些表格包含一个主键字段和一个外键字段,外键字段用于建立表格之间的关系。 2. 插入数据:接下来,我们需要向表格中插入数据,以构建形结构。通常,每个数据行都包含一个唯一的主键值和一个外键值,外键值指向其父节点的主键值。 3. 查询数据:使用递归查询的方法,我们可以从根节点开始,逐级向下遍历整个形结构,找到所需的数据。在MySQL中,可以使用WITH RECURSIVE语句来实现递归查询。 4. 更新数据:如果需要修改形结构中的数据,我们可以通过更新表格中的外键值来实现。例如,如果需要将一个节点从一个父节点移动到另一个父节点,可以通过更新该节点的外键值来实现。 总结而言,MySQL多表形结构递归实现是一种使用多个表格和递归查询方法来构建和操作形结构的方法。这种方法可以方便地查询和操作形结构的数据,在很多场景下都具有较高的实用性。 ### 回答3: MySQL是一种广泛使用的关系型数据库管理系统,可以用于存储和管理大量的数据。在MySQL中,可以使用多个表结构来实现形结构的递归。 在实现形结构的递归时,首先需要创建一个包含节点信息的表。该表至少应包含一个节点ID、节点名称、父节点ID等列。可以使用主键和外键约束来确保节点间的关系正确性。 接下来,可以通过使用递归查询来获取形结构的数据。在MySQL中,可以使用WITH RECURSIVE子句来实现递归查询。该子句可以将表自身连接多次,从而实现递归查询。 具体步骤如下: 1. 创建一个包含节点信息的表,例如节点表; 2. 在节点表中,定义一个主键列node_id和一个外键列parent_id,用于建立节点间的层次关系; 3. 使用WITH RECURSIVE子句编写递归查询语句,例如: WITH RECURSIVE cte (node_id, node_name, parent_id, level) AS ( SELECT node_id, node_name, parent_id, 0 FROM node_table WHERE node_id = 1 -- 将根节点的ID作为起点 UNION ALL SELECT n.node_id, n.node_name, n.parent_id, cte.level + 1 FROM node_table n INNER JOIN cte ON n.parent_id = cte.node_id ) SELECT * FROM cte; 4. 执行上述递归查询语句,即可获得形结构的数据。 通过以上步骤,可以在MySQL中实现多表形结构的递归查询。递归查询可以帮助我们快速获取形结构的所有节点和层次关系,非常方便实用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值