路径枚举计数器

时间:2013-12-14 22:22:46

标签: php mysql mysqli hierarchy hierarchical-data

我的网站有一个评论系统,评论存储在一个如下所示的表格中:

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();

1 个答案:

答案 0 :(得分:2)

您可以使用updatewhere子句执行您想要的操作:

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;