标签: hierarchical-data

Winform中的IHierarchyData和IHierarchicalEnumerable

目前,我知道如何在树视图控件中执行延迟实现节点的加载过程,并在stackoverflow中读取相关问题,但我也在阅读asp.net中的IHierarchyData和IHierarchicalEnumerable接口(我没有知道代码asp.net)允许将集合绑定到树视图,以便自动显示项目.

它想知道我是否可以在winforms和C#中做同样的事情.我认为前面提到的接口在winforms中不可用.

谢谢.

c# treeview hierarchical-data winforms

6
推荐指数
1
解决办法
2449
查看次数

用于将层次化平面数据(带有ParentID)转换为带有缩进级别的已排序平面列表的算法

我有以下结构:

MyClass {
  guid ID
  guid ParentID
  string Name
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个数组,其中包含按元素应在层次结构中显示的顺序排列的元素(例如,根据其“ left”值),以及将GUID映射到缩进级别的哈希。

例如:

ID     Name     ParentID
------------------------
1      Cats     2
2      Animal   NULL
3      Tiger    1
4      Book     NULL
5      Airplane NULL
Run Code Online (Sandbox Code Playgroud)

这实质上将产生以下对象:

// Array is an array of all the elements sorted by the way you would see them in a fully expanded tree
Array[0] = "Airplane"
Array[1] = "Animal"
Array[2] = "Cats"
Array[3] = "Tiger"
Array[4] = "Book"

// IndentationLevel is a hash of GUIDs to IndentationLevels.
IndentationLevel["1"] …
Run Code Online (Sandbox Code Playgroud)

language-agnostic algorithm hierarchical-data

6
推荐指数
1
解决办法
2843
查看次数

在树中查找节点级别

我有一个树(嵌套类别)存储如下:

CREATE TABLE `category` (
  `category_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `category_name` varchar(100) NOT NULL,
  `parent_id` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`category_id`),
  UNIQUE KEY `category_name_UNIQUE` (`category_name`,`parent_id`),
  KEY `fk_category_category1` (`parent_id`,`category_id`),
  CONSTRAINT `fk_category_category1` FOREIGN KEY (`parent_id`) REFERENCES `category` (`category_id`) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci
Run Code Online (Sandbox Code Playgroud)

我需要用节点信息(子+父)提供我的客户端语言(PHP),以便它可以在内存中构建树.我可以调整我的PHP代码,但我认为如果我能按照所有父母在他们的孩子面前的顺序检索行,那么操作会更简单.如果我知道每个节点的级别,我就可以这样做:

SELECT category_id, category_name, parent_id
FROM category
ORDER BY level -- No `level` column so far :(
Run Code Online (Sandbox Code Playgroud)

你能想出一种方法(视图,存储例程或其他......)来计算节点级别吗?我想如果它不是实时的,我可以在节点修改时重新计算它.

第一次更新:目前为止的进展

我根据Amarghosh的反馈写了这些触发器:

DROP TRIGGER IF EXISTS `category_before_insert`;

DELIMITER //

CREATE TRIGGER `category_before_insert` …
Run Code Online (Sandbox Code Playgroud)

mysql sql innodb hierarchical-data mysql-error-1442

6
推荐指数
1
解决办法
3074
查看次数

从数据库中获取节点树以进一步渲染的最佳实践是什么?

假设我们有一个包含用户评论的表格.第一级评论引用了他们所附的文章.更深层次的注释没有设计引用,但它们引用了它的父注释.

对于这个数据库结构 - 获取给定文章的所有注释然后以html格式呈现它的最有效方法是什么?(假设我们有大约200条第一级的评论和最深的20级评论)

mysql threaded-comments hierarchical-data

6
推荐指数
2
解决办法
2988
查看次数

如何有效地搜索此层次结构?

我有一个如下所示的数据结构:

public class Node
{
     public string Code { get; set; }
     public string Description { get; set; }
     ...
     public List<Node> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想编写一个方法,在给定指定的情况下返回特定节点Code.通常我会在层次结构中进行递归遍历以找到节点,但我关注性能.层次结构中将有数千个节点,并且此方法将被多次调用.

如何构建它以使其更快?我是否可以使用可能Code在保留层次结构的同时执行二进制搜索的现有数据结构,而无需自己重新实现某种形式的二进制搜索?

c# performance hierarchical-data data-structures

6
推荐指数
1
解决办法
2792
查看次数

父子链的SQL查询

我有一个表可以引用表中的另一个成员作为父表.该父级也可以将另一行称为其父级......依此类推.

id     col1     col2    parentID
1      foo      bar       NULL
2      blah     boo       1
3      fob      far       2
4      wob      lob       NULL
Run Code Online (Sandbox Code Playgroud)

我想返回给出id的链.因此,如果id为3,我将返回第3行,第2行和第1行.如果id为2,我将返回第2行和第1行.如果id为1或4,我将返回该行.

谢谢

sql t-sql sql-server sql-server-2005 hierarchical-data

6
推荐指数
1
解决办法
1万
查看次数

如何将排序顺序添加到表示多对多关系的MySQL闭包表中?

这是我的问题的后续问题:
如何在MySQL中实现多对多层次结构
,这里:
如何在MySQL 中记录顺序的记录集合.

简而言之,我想在MySQL中实现一个食谱表和另一个指令.配方是一系列连续的指令或其他配方.例如,您可以想象一个Peach_preserve配方,一个Peach_tart使用该配方,以及Peach_preserve一系列其他步骤(说明). Peach_preserve可以用于许多其他食谱.

我读过Bill Karwin关于闭包表的博客文章,我认为这个解决方案最能解决我的挑战(我的层次结构是多对多的,步骤是顺序的).所以例如我会:

recipe
id  name
1   Peach preserve
2   Cubed peeled peaches
3   Fresh peaches
4   Powdered sugar
5   Cook together
6   Peel and cut in chunks
7   Mix

step (or instruction)
id  desc
1   Cook together
2   Buy peaches
3   Buy sugar
4   Peel and cut in chunks
5   Mix

recipe_instruction
(Ancestor) (Descendant)
recipe_id  step_id   depth  descendant_is_instruction
3          3 …
Run Code Online (Sandbox Code Playgroud)

mysql hierarchical-data

6
推荐指数
2
解决办法
1907
查看次数

使用不使用INDEX的查询变量进行SELECT

我正在玩(出于兴趣)在一个简单的邻接列表中检索一个节点树,并使用局部变量进行递归查询.

我到目前为止的解决方案很有趣但我不知道(这是我唯一的问题)为什么MySQL拒绝使用任何INDEX优化此查询.MySQL不能使用INDEX?查找最近的子节点吗?

我很好奇为什么MySQL没有.即使我使用FORCE INDEX执行计划也没有改变.

这是到目前为止的查询,它5是父节点的ID:

SELECT 
  @last_id := id AS id,
  parent_id,
  name,
  @depth := IF(parent_id = 5, 1, @depth + 1) AS depth
FROM 
  tree FORCE INDEX (index_parent_id, PRIMARY, index_both),
  (SELECT @last_id := 5, @depth := -1) vars
WHERE id = 5 OR parent_id = @last_id OR parent_id = 5
Run Code Online (Sandbox Code Playgroud)

试试SQLfiddle的实例

请注意,原因不能是小数据集,因为当我指定FORCE INDEX (id)FORCE INDEX (parent_id)FORCE INDEX (id, parent_id)... 时行为不会改变

文档说:

您还可以使用FORCE INDEX,其作用类似于USE INDEX(index_list),但另外还假设表扫描非常昂贵.换句话说,只有在无法使用某个给定索引查找表中的行时才使用表扫描.

必须有一些东西使查询无法使用INDEX,但我不明白它是什么. …

mysql indexing adjacency-list hierarchical-data query-variables

6
推荐指数
1
解决办法
918
查看次数

从闭包表SELECT语句渲染树?

[上一个问题]

我正在尝试向应用程序添加类似reddit的注释,我决定使用闭包表模式进行数据库组织.我的app数据库看起来有点像这样:

帖子

+----+-------+
| id | title |
+----+-------+
|  1 | Hello |
+----+-------+
Run Code Online (Sandbox Code Playgroud)

评论

+----+-----------+---------+------+
| id | parent_id | post_id | text |
+----+-----------+---------+------+
|  1 |      NULL |       1 | ...  |
|  2 |         1 |       1 | ...  |
|  3 |         2 |       1 | ...  |
|  4 |         3 |       1 | ...  |
|  5 |         3 |       1 | ...  |
|  6 |         5 |       1 | …
Run Code Online (Sandbox Code Playgroud)

python sql tree hierarchical-data transitive-closure-table

6
推荐指数
1
解决办法
2287
查看次数

在HTS R中创建分层数据结构,节点

我正在尝试使用R中的HTS包创建节点结构.有关节点的文档很稀疏,因此尝试对节点结构进行适当的编码很困难,并添加一个添加的层我试图创建两个层次结构,我们在其中拥有下列:

(层次1 - 地理:例子是美国特拉华州及其县)

=> 10000
    => 10001 
    => 10003          
    => 10005
    => 10999
Run Code Online (Sandbox Code Playgroud)

(层次结构2 - 行业:简化)

=> 10
     => 11
     => 12 
     => 21 
     => 22 
     => 31
     ...
     => 99
Run Code Online (Sandbox Code Playgroud)

编辑2 - 更正的层次结构和进一步的说明

所以每个时间序列都有一个地理代码和一个行业代码.地理代码遵循一个层次结构,行业代码另一个(如上所示).

我试图弄清楚如何指定"nodes"参数来表示两个层次结构的关系(文档示例仅显示单个层次结构).

当两个层次结构相互作用时,我们会获得更多级别.假设只有2个行业,11和12,我们简化.由(10001,11)和(10001,12)确定的时间序列必须加起来(10001,10); 而且,(10001,11)...(10999,11)必须加起来(10000,11)等等.再次,这些是简化的层次结构 - 在实际数据中有更多的层次.

问题是,两个层次结构的"节点"参数如何?希望这可以帮助.

r time-series hierarchy hierarchical-data forecasting

6
推荐指数
1
解决办法
2236
查看次数