问题标签 [hierarchical-data]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - 如何避免 SQL-Server 中的循环关系?
我正在创建一个自相关表:
表Item
列:
ItemId int - PK;
金额 - 不为空;Price money - 使用 UDF 的计算列,根据项目祖先的 Amount 检索值。
ParentItemId int - 可为空,引用此表中的另一个 ItemId。
我需要避免循环,这意味着兄弟姐妹不能成为他祖先的祖先,这意味着如果 ItemId=2 ParentItemId = 1,则不应允许 ItemId 1 ParentItemId = 2。
我不知道在这种情况下最好的做法是什么。我想我应该添加一个从 UDF 或其他任何东西获取标量值的 CK。
编辑: 另一个选项是创建一个 INSTEAD OF 触发器并将 ParentItemId 字段的更新放入 1 个事务中,并从 @@RowIdentity 中选择 Price 字段,如果它失败取消事务,但我更喜欢 UDF 验证。
任何想法都受到真诚的欢迎。
mysql - 关于分层数据的问题
我正在阅读以下关于“在数据库中存储分层数据”的文章http://articles.sitepoint.com/article/hierarchical-data-database/2 。
这是在谈论这些结构。http://sitepointstatic.com/graphics/sitepoint_numbering.gif和http://sitepointstatic.com/graphics/table02.gif
我不明白下面的段落。这些是什么意思。
“每次从节点的子节点开始时,都会将该节点的正确值添加到堆栈中。”
和
“当你显示完一个节点时,你从堆栈中删除它的正确值。如果你计算堆栈中的元素,你将得到当前节点的级别。”
如果可能的话,我希望有人以更简单的方式解释这些。
为了显示树结构,子级的缩进应该比父级稍多。我们可以通过保留一堆正确的值来做到这一点。每次从节点的子节点开始时,都将该节点的正确值添加到堆栈中。你知道那个节点的所有子节点的正确值都小于父节点的正确值,所以通过比较当前节点的正确值和堆栈中最后一个正确的节点,你可以看看你是否还在显示该父母的孩子。当您完成显示一个节点时,您从堆栈中删除它的正确值。如果您计算堆栈中的元素,您将获得当前节点的级别。
linq - 层次结构迭代和LINQ
假设我们有课
如您所见 - 每个菜单项都可以有子项 - 像往常一样在菜单中。我的任务是遍历此列表的每个项目并对其应用一些操作。经典决策是编写递归迭代。但如果 LINQ 可以让我的任务更轻松,我会很感兴趣吗?例如,我假设我们可以编写查询来获取对象的平面列表,我可以简单地使用 foreach 对其进行迭代。但是我这种方式的尝试还没有成功。所以任何帮助表示赞赏!
php - 具有两个表的邻接表模型
所以我认为我的问题归结为两个问题:
当树存储在 MySQL 中(在两个表之间)时,如何使用邻接列表模型方法在 PHP 中构建可遍历的树结构,同时牢记性能?
什么是一种可维护的方法来以所需的格式显示树而不复制遍历代码并用 if/else 和 switch 语句乱扔逻辑?
以下是更多详细信息:
我正在使用 Zend 框架。
我正在处理一份问卷。它存储在两个单独的表之间的 MySQL 数据库中:questions 和 question_groups。每个表都扩展了适当的 Zend_Db_Table_* 类。层次结构使用邻接列表模型方法表示。
我意识到我遇到的问题可能是由于我将树结构填充到 RDBMS 中,所以我对替代方案持开放态度。但是,我还存储了问卷调查对象和他们的回答,因此需要替代方法来支持这一点。
问卷需要以各种 HTML 格式显示:
- 作为输入响应的表单(使用 Zend_Form)
- 作为带有问题(和某些组)的有序列表(嵌套),作为按问题或按组查看响应的链接。
- 作为一个有序列表(嵌套),每个问题都附加了回复。
问题是叶节点,question_groups 可以包含其他 question_groups 和/或问题。加起来,有超过 100 行需要处理和显示。
目前,我有一个视图助手,它使用递归进行所有处理以检索 question_group 的子项(一个在两个表之间执行 UNION 的查询:QuestionGroup::getChildren($id))。此外,当显示带有问题响应的问卷时,需要额外的两个查询来检索受访者及其对每个问题的回答。
虽然页面加载时间不是很长,但这种方法感觉不对。递归加上几乎每个节点的多个数据库查询,并没有让我内心感到很温暖和模糊。
我已经在从 UNION 返回的完整树数组上尝试了无递归和递归方法,以构建一个分层数组来遍历和显示。但是,由于组和问题存储在单独的表中,因此存在重复的节点 ID,这似乎被打破了。也许我在那里遗漏了一些东西......
目前,以上面列出的格式显示树的逻辑相当混乱。我不想到处重复遍历逻辑。然而,到处都是条件语句也不会产生最容易维护的代码。我已经阅读了有关访问者、装饰器和一些 PHP SPL 迭代器的信息,但我仍然不清楚它们如何与扩展 Zend_Db_Table、Zend_Db_Table_Rowset 和 Zend_Db_Table_Row 的类一起工作。特别是因为我还没有解决以前从数据库构建层次结构的问题。稍微轻松地添加新的显示格式(或修改现有的)会很好。
python - Python Hierarchical QcomboBox:清理列表
我有一个分层的两个组合框。第一个组合框显示客户名称列表,即来自 MySQL 数据库的不同公司。每个客户在不同的城市都有分支机构。
然后,当从组合框1 选项列表中选择客户名称时,例如{Aldi, Meyer, Carrefour, WalMart},对于该特定客户,城市/分支机构的列表会自动显示在组合框2 中。类似的东西,例如:
当我们再次选择另一个客户时,问题就出现了,该客户最终拥有较少的分支机构 - 例如
这是运行 combo2 的函数,每次从列表 combo1 中选择 customerName 时都会调用该函数:
以及添加属于该客户的列表城市的每个名称的函数:
我们尝试使用 del 清除列表的先前内容,但它仍然得到相同的行为。
这是 Qt 还是 Python 相关的问题?或者我们在这里缺少一些东西?
高度赞赏所有意见和建议。
mysql - 使用 CakePHP Tree Behavior 在一张表中拥有多棵树
我在我的 CakePHP 应用程序中将一个平面列表转换为一个树,并发现存在具有此功能的现有行为。我的表不是一棵巨树,而是由许多用户生成的树组成:基本上,每个用户都可以创建自己的文件夹结构。然而,树行为似乎只会跟踪整个表中的 lft/rght 值,就好像它是一棵巨树一样。因此,如果添加了新文件夹或子文件夹,则需要更新整个表。
我对树行为的实际工作方式是否有误,或者如果没有,有没有办法解决这个问题?
参考链接:
asp.net-mvc - jQuery:可排序的嵌套列表?
我正在建立一个具有父子分页结构的网站。我正在寻找一种方便的方式来管理网站结构。
- 我希望页面是可排序的
在我生成的站点地图(嵌套 UL)上释放 jQuery 可排序代码,无法正常工作......
真正重要的是不能在当前 UL 之外进行排序。有什么建议么?
提前致谢。
database - 关系数据库中的分层过滤
我的程序中有一堆项目都属于特定类别。我只想返回属于该类别的项目。问题是类别可以有父类别。例如,假设有一个类别“Stuff”,其子类别为“Food”,子类别为“Fruit”。我有这些物品,苹果、梨、巧克力和电脑。
如果我想显示所有的水果,很容易使用“WHERE item.category = FRUIT_ID”子句进行数据库查询。但是,如果我想把所有食物都包括在内,我也需要一种方法把水果放进去。
我知道一些数据库,如 Oracle,有递归查询的概念,这可能是正确的解决方案,但我对分层数据没有太多经验,正在寻找一般性建议。假设我对数据库模式有无限的控制,类别树最多只有 5 个类别,我需要它尽可能快。
sql - 棘手的 SQL SELECT 问题(MySQL)
拥有这张桌子(抱歉,这里似乎无法获得像样的布局):
我将表中的行用作选择其他行的过滤器/掩码。
因此,用户已经选择了以下行:
我现在想找出 PD=30 的哪些行适合之前的选择:
PD=10, Text=Aproducer 给出 Mask_Producer 必须是“Aprod”,(Mask_Dep 和 Mask_Diam 可以是任何星星)
PD=20, Text=A 给出 Mask_Producer 必须是“Aprod”,Mask_Dep 必须是 10 或 20,Mask_Diam 必须是 30 或 40(或星号)
我希望结果是上表中的第 6 行和第 7 行。
然后想象这个例子有 2000 行和 20 个 Mask_xx 字段......
我正在考虑像 IN、LEFT JOIN、JOIN 和临时表这样的 SQL 来执行此操作,但我认为我可能使事情复杂化了太多......
apache-flex - AdvancedDataGrid 地狱:分组行的数据
我需要一个分层网格来显示父行和子行的列中的数据。
我试图让 ADG 工作,但默认情况下,除了父行的分组列空白之外,它的所有列都是空白的。我想我可以使用项目渲染器将数据推送出去。
我的阻塞问题是我的分组似乎根本不起作用。我设置 dataProvider=MyArrayCollection 时可以看到数据,但是
不起作用:没有数据出现。我试过有一个明确的“子名”列,但没有。我尝试将它包装在 HierarchicalCollectionView 中,但这也不起作用。我已经浏览了基本的分组教程,我的代码和数据看起来遵循了模式。
有任何想法吗?