【问题标题】:mysql select - how to retrieve a result for threaded/nested messages?mysql select - 如何检索线程/嵌套消息的结果?
【发布时间】:2010-09-30 20:14:15
【问题描述】:

我正在创建一个线程留言板,并试图使其保持简单。有一个消息表,然后是一个回复表,其中包含一个“reply_id”字段,该字段可以为 null 以指示顶级响应,也可以是指示线程响应的值。

我对如何在这种类型的表上执行 SELECT 调用有点困惑?

Reply
-id (every reply gets a unique id)
-message_id (the message it is replying to)
-reply_id (the id of the reply it may be replying to - for threading)
-reply

我知道这可能是一个复杂的问题,尤其是在性能方面,但我真的只是在寻找最基本的解决方案。

谢谢...

【问题讨论】:

    标签: mysql multithreading select nested hierarchical-data


    【解决方案1】:

    您正在使用天真的“教科书”方式来存储树,即存储对直接父级的引用。这种设计称为邻接列表。还有其他解决方案:

    • 路径枚举,您可以在树的每个节点中存储一个编码其所有直接祖先的字符串。
    • 嵌套集,Joe Celko 提出的一种巧妙方法,您可以使用每个节点的两个数值来绑定其所有后代。
    • 闭包表(或邻接关系),您可以在其中使用单独的表来列出每个祖先-后代对。

    请参阅我对“What is the most efficient/elegant way to parse a flat table into a tree?”的回复,了解闭包表设计的参考和示例。

    【讨论】:

    • 我也喜欢 Closure Table 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 2015-06-23
    • 2016-04-30
    • 2016-12-09
    • 1970-01-01
    相关资源
    最近更新 更多