在我的数据库中,我有以下帖子结构:
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
如果我想更新回复总数,查询将如何/如何?
感谢。 :)
答案 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)