增加对帖子的总回复

时间:2013-12-11 01:33:40

标签: php mysql mysqli

在我的数据库中,我有以下帖子结构:

post_id | reply_to | parent_id
   1         1           1
   2         1           1
   3         2           1
   4         3           1

所以在这种情况下,post_id 1是主帖,而post_id 2是对post_id 1的回复,post_id 3是对post_id 2的回复,post_id是对post_id 3的回复。

我想要做的是添加另一列来跟踪帖子的回复总数。所以最后,表格看起来像这样:

post_id | reply_to | parent_id | total_replies
   1         1           1            3
   2         1           1            2
   3         2           1            1
   4         3           1            0

如果我想更新回复总数,查询将如何/如何?

感谢。 :)

2 个答案:

答案 0 :(得分:1)

如果您只想对每个帖子进行简单的计算,请执行以下操作:

UPDATE  posts 
        LEFT JOIN
        (
            SELECT post_id , (SELECT count(*) from posts p0 where p.post_id = p0.reply_to) as total_replies
            FROM posts p 
        ) p2 ON posts.post_id  = p2.post_id 
SET     posts.total_replies =p2.total_replies;

在那里工作:http://sqlfiddle.com/#!2/868c6/1

现在,您想要的是执行递归读取,以计算回复,直到它到达顶部帖子。更糟糕的方法是在查询数据时进行计算,所以在保存新帖子时,可以在PHP上执行此操作,或者在数据库中创建存储过程/函数,它将类似于:

$total_reply = 0;

function calculateTotalReply($postId)
{

    //Make the simple sum as I did above
   $total_reply = $sum;

    //Check if is the top post
    if(!$isTheTopPost)
    {
         calculateTotalReply($parentPost);
    }

}

所以,正如你所看到的,它会在自己到达顶部帖子之前自称,最后在$total_reply你会得到你想要的金额。

答案 1 :(得分:0)

类似的东西:

update posts p set total_replies = (select count(t.post_id) from 
posts t where t.reply_to = p.post_id)