1
19
我真的很喜欢
Drupal
解决了这个问题。它为每个注释分配一个线程ID。对于第一条注释,此ID从1开始。如果将答复添加到此注释中,则ID
当线程呈现时,属于该线程的所有注释将在一个查询中提取,并按线程ID排序。这将按升序提供线程。此外,使用线程ID,您可以找到每个注释的嵌套级别,并相应地缩进它。
有几个问题需要解决:
Drupal使用一个名为vancode的编号系统以更复杂的方式解决了第一个问题。对于第二个问题,当按降序排序时,通过向线程ID附加反斜杠(其ASCII代码高于数字)来解决。您可以通过检查 comments module (请参阅函数注释获取线程之前的大注释)。 |
2
4
我知道答案有点晚,但是对于树数据,使用一个闭包表 http://www.slideshare.net/billkarwin/models-for-hierarchical-data 它描述了4种方法:
最后一种方案与其他方案相比具有易于积垢操作的优点。成本是空间,在最坏的情况下,数字树节点的大小是O(n^2),但在实践中可能并不那么糟糕。 |
3
2
不幸的是,纯SQL方法的速度非常慢。
这个
在我的博客上看到这篇文章,关于如何在
您需要创建一个函数:
在这样的查询中使用它:
这是当然的
如果你想把这个随身携带
|
4
2
实际上,我是自己做的!我使用嵌套集模型来表示关系数据库中的分层数据。 Managing Hierarchical Data in MySQL 对我来说是纯金的。嵌套集是本文中描述的第二个模型。 |
5
2
您可以在相邻集模型和嵌套集模型之间进行选择。文章 Managing Hierarchical Data in MySQL 做一个很好的介绍。 有关理论讨论,请参阅Celko的 Trees and Hierarchies . 如果数据库支持窗口功能,那么实现线程列表就相当容易。您所需要的只是目标数据库表中的递归引用,例如:
然后可以使用递归公用表表达式来显示线程视图。有一个例子 here . |
6
0
实际上,它必须在读和写之间保持平衡。 如果您可以在每次插入时更新一组行,那么嵌套集(或等效集)将为您提供简单、快速的读取。 除此之外,父级上的一个简单FK将为您提供非常简单的插入,但对于检索来说可能是一个噩梦。 我想我会使用嵌套集,但是要注意预期的数据量和使用模式(更新每个插入的两个索引列上的几行,可能很多行(用于左和右信息)在某些时候可能是个问题)。 |