javascript - 构建树数据结构表单mysql表递归问题
问题描述
我正在尝试从存储在自引用的 mysql 表中的数据构建递归结构形式,这意味着某些行可以成为其他行的父行,这是我拥有的演示数据
结果树应该是一棵树,它显示孩子的父母与我的代码之间的关系我设法产生 的问题是 bio4 缺少它的孩子 bio5 我认为问题是当我们有两个 sup 父母在同一级别时第一个一个工作正常,但是当递归结束并回溯到其他级别时,第二个子级别的父级变为 null 这是我的代码,到目前为止,我在 express 的主要路线中也使用了 knex.js 和 accesscontrol.js 模块
router.get('/',async function (req, res, next) {
const permission = ac.can(req.user.role).readAny("test");
if (!permission.granted)
res.status(401).send("Insufficient Permission");
testgroups = await db(`servicegroups`).select("*","ServiceGroupId AS id","Name AS text ",db.raw(`(SELECT "root" ) AS type`) ).where("ServiceGroupType", '=', 2).andWhere("ParentId", '=', 0).andWhere("Deleted",'=',0).select();
var result = [];
for(i in testgroups){
result.push(testgroups[i])
await global.getTestChildrens(testgroups[i], db);
}
res.render("admin/lis/tests/tests",{user:req.user , data:{testgroups:JSON.stringify(result) } })
});
主要功能也是这样 请注意,global 只是我在系统中使用的一个全局变量,它有几个重要的函数可以使用其中一个是递归函数,而 db 只是我的数据库连接的 knex 实例
global.getTestChildrens =async function (entity,db) {
childs = await db('servicegroups').select("*", "ServiceGroupId AS id", "Name AS text ", db.raw(`(SELECT "subroot" ) AS type`)).where("ParentId", '=', entity.ServiceGroupId).andWhere("Deleted", '=', 0);
if(childs.length>0){
entity.children = childs;
}else{
entity.type = "leaf";
}
for(i in childs){
if (childs[i]){
await global.getTestChildrens(childs[i], db);
}else{
console.log("undifened found :"+i)
}
}
return entity;
}
解决方案
推荐阅读
- powershell - 使用文件夹重命名和移动文件时循环
- android - Firebase 云消息服务不显示通知(谷歌说它已发送)
- javascript - 鼠标点击顶部图像
- c# - C# 抽象函数赋值(委托)
- javascript - mongodb从数组中提取对象不使用猫鼬
- python - 如何在 pyspark 中处理 Glue 数据目录中的空表
- amazon-web-services - EC2 专用实例是否共享 RAM 带宽?
- c# - 如果禁用/启用对撞机,动画师将不再工作
- sql-server - 我可以将 SSRS 2008 R2 与 SQL Server 2008 数据库一起使用吗?
- html - 样式输入类型编号更多加号按钮在侧面