目前,我知道如何在树视图控件中执行延迟实现节点的加载过程,并在stackoverflow中读取相关问题,但我也在阅读asp.net中的IHierarchyData和IHierarchicalEnumerable接口(我没有知道代码asp.net)允许将集合绑定到树视图,以便自动显示项目.
它想知道我是否可以在winforms和C#中做同样的事情.我认为前面提到的接口在winforms中不可用.
谢谢.
我有以下结构:
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) 我有一个树(嵌套类别)存储如下:
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) 假设我们有一个包含用户评论的表格.第一级评论引用了他们所附的文章.更深层次的注释没有设计引用,但它们引用了它的父注释.
对于这个数据库结构 - 获取给定文章的所有注释然后以html格式呈现它的最有效方法是什么?(假设我们有大约200条第一级的评论和最深的20级评论)
我有一个如下所示的数据结构:
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
在保留层次结构的同时执行二进制搜索的现有数据结构,而无需自己重新实现某种形式的二进制搜索?
我有一个表可以引用表中的另一个成员作为父表.该父级也可以将另一行称为其父级......依此类推.
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,我将返回该行.
谢谢
这是我的问题的后续问题:
如何在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拒绝使用任何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)
请注意,原因不能是小数据集,因为当我指定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
我正在尝试向应用程序添加类似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) 我正在尝试使用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)等等.再次,这些是简化的层次结构 - 在实际数据中有更多的层次.
问题是,两个层次结构的"节点"参数如何?希望这可以帮助.
mysql ×4
sql ×3
c# ×2
algorithm ×1
forecasting ×1
hierarchy ×1
indexing ×1
innodb ×1
performance ×1
python ×1
r ×1
sql-server ×1
t-sql ×1
time-series ×1
tree ×1
treeview ×1
winforms ×1