针对线程评论的可扩展解决方案

时间:2010-01-27 20:00:20

标签: php mysql threaded-comments

我不确定如何在PHP和MySQL中创建一个可以一次处理数百条评论的线程评论系统。

这样的事情是我唯一可以提出的事情

$query = execute_query...('SELECT * FROM `comments` WHERE `post` = "1"');
foreach($query as $comment){
    $replies = execute_query...('SELECT * FROM `comment_replies` WHERE `comment` = "' . $comment['id'] . '"');
    if($replies){
        echo $comment['body']; //....
        foreach($replies as $reply){ /*....*/ }
    }
    else{
        echo $comment['body'];
    }
}

所以我需要有关数据库结构的提示,以及如何在考虑性能的情况下检索所有线程评论,请:)

3 个答案:

答案 0 :(得分:6)

我相信你会发现文章Managing Hierarchical Data in MySQL很有帮助。这两个表可以很容易地合并为一个

答案 1 :(得分:1)

为什么不加入评论和comment_replies表?

然后只需添加一个额外的生成字段,显示其是注释还是comment_reply。并使用if中的if选择它们:

if($type == 'comment') 
{
      //do something with the comment
}
elseif($type == 'comment_reply')
{
      //do something with the comment reply
}

同时检查评论ID是否发生变化,以便分开。

答案 2 :(得分:1)

我会选择邻接列表模型而不是嵌套集模型,因为使用嵌套集模型,我必须在表上完成的每个INSERT和DELETE操作上构建整个树结构,如果我有1000个记录,单个INSERT或DELETE操作必须更新所有记录,花费更多时间执行。 我的数据库结构是: enter image description here

我还用php mysql jquery和ajax写了一个小线程评论系统。看看http://pradipchitrakar.com.np/programming/threaded-comment-system/