在网页中添加,删除和更新评论标签

时间:2011-09-22 15:07:39

标签: php mysql

我正在为一个网页构建一个评论功能,其中所有评论都可以包含任意数量的标签(不是HTML标签,但这里的标签是SO,不允许重复),这些标签可以由任何人更新。

假设某条评论包含标记[tag1, tag2, tag3],而有人添加了一个标记tag4,则会删除tag2。现在,我如何检查新标签集中的旧标签以及可能添加的标签?

我有表comments,其中包含idcomment列(与此问题无关)和comment_tags表,其中包含id },tagcomment_id列。

我可以将所有旧标记添加到给定注释中,然后循环遍历该数组并使用每个标记检查新标记中包含的标记。如果没有,请删除该标记。然后循环遍历新的标记集,检查旧标记集中包含的每个新标记。如果没有,请将该标记添加到comment_tags表。

不知何故,这听起来太慢了,我猜测有更好的方法可以做到这一点。所以这是我最初的想法:

$db = new Database();
$purifier = new HTMLPurifier();

$existing_tags = $db -> get_comment_tags($_POST['comment_id']);

$new_tags = $purifier -> purify($_POST['tags']);
$new_tags = explode(" ", $new_tags);
$new_tags = array_unique($new_tags);

/* Delete tags that were not included in the new set of tags */
foreach ($existing_tags as $tags => $tag) {
    if (!in_array($tag['tag'], $new_tags)) {
        $db -> delete_comment_tag($existing_tags[$tags]['id']);
    }
}

/* Since get_comment_tags returns array which contains arrays, 
let's strip unnecessary info */
$filtered_existing_tags = array();
foreach ($existing_tags as $key => $value) {
    $filtered_existing_tags[] = $value['tag'];
}

/* Add tags that were not included in the old set of tags */
foreach ($new_tags as $key => $value) {
    if (!in_array($value, $filtered_existing_tags)) {
        $db -> add_comment_tag($_POST['comment_id'], $value);
    }       
}

1 个答案:

答案 0 :(得分:1)

我通常会在posts_tags表上运行两个SQL查询来实现这一点:一个用于删除当前链接到帖子的所有标记,另一个用于插入所有当前有效的标记。