我的网站有一个评论系统,评论存储在一个如下所示的表格中:
post_id | path | total_replies
1 1/ 3
2 1/2/ 2
3 1/2/3/ 1
4 1/2/3/4/ 0
在文字中,帖子ID 2 是对帖子ID 1 的回复,帖子ID 3 是对帖子ID的回复2 这是对帖子ID 1 等的回复。它实际上只是一条路径。
帖子ID 1 的total_replies列是3
,因为有3个回复(post id 2,3和4),并且相同的逻辑用于其他行。
因为这是一个评论系统,所以每次发表新评论时都会添加更多行。我想要做的是找到一种方法来在每次创建新列时增加total_replies列。
例如,如果有人向帖子ID 2 做了新回复(帖子ID 5 ),那么表格看起来像这样:
post_id | path | total_replies
1 1/ 4 (this was incremented)
2 1/2/ 3 (this was incremented)
3 1/2/3/ 1
4 1/2/3/4/ 0
5 1/2/5/ 0
所以,我的问题是,每次做出新回复时我该如何进行递增?
编辑 :我当前的查询。
$stmt = $cxn->prepare("UPDATE posts SET total_replies = total_replies+1 WHERE ? LIKE concat(?, '%') AND post_path != ?");
$stmt->bind_param('sss', $new_path, $path, $new_path);
$stmt->execute();
答案 0 :(得分:2)
您可以使用update
和where
子句执行您想要的操作:
update comments
set total_replies = total_replies + 1
where NEWPATH like concat(path, '%');
在这种情况下,NEWPATH将是'1/2/5/'
。目前还不清楚您是在变量中还是仅在表中添加新行。这假定您将其作为变量。
编辑:
如果您不想更新原始记录:
update comments
set total_replies = total_replies + 1
where NEWPATH like concat(path, '%') and NEWPATH <> path;