Php 添加、删除和更新网页中注释的标记
我正在为一个网页构建一个评论功能,其中所有评论都可以有任意数量的标签(不是HTML标签,而是像这里这样的标签,不允许重复),并且任何人都可以更新这些标签 假设一些注释包含标记Php 添加、删除和更新网页中注释的标记,php,mysql,Php,Mysql,我正在为一个网页构建一个评论功能,其中所有评论都可以有任意数量的标签(不是HTML标签,而是像这里这样的标签,不允许重复),并且任何人都可以更新这些标签 假设一些注释包含标记[tag1,tag2,tag3],而有人添加了一个标记tag4,删除了tag2。现在,我如何检查哪一个旧标记不在新标记集中,以及可能添加了哪些标记 我有表comments,其中包含id和comment列(除其他外,与此问题无关)和comment\u标签表,其中包含id、tag和comment\u id列 我可以将所有的旧标签
[tag1,tag2,tag3]
,而有人添加了一个标记tag4
,删除了tag2
。现在,我如何检查哪一个旧标记不在新标记集中,以及可能添加了哪些标记
我有表comments
,其中包含id
和comment
列(除其他外,与此问题无关)和comment\u标签
表,其中包含id
、tag
和comment\u id
列
我可以将所有的旧标签放到给定的注释中,然后循环遍历该数组,并使用每个标签检查新标签集中包含的标签。如果没有,请删除该标记。然后循环遍历新的标记集,检查旧标记集中包含的每个新标记。如果没有,则将该标记添加到comment\u 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);
}
}
我通常只需在
posts\u tags
表上运行两个SQL查询即可完成此操作:一个用于删除当前链接到帖子的所有标记,另一个用于插入所有当前有效的标记 是的,也许我就是这么做的。听起来不太容易出错,虽然我必须在数据库端删除和插入很多。如果直接查询mysql,可以在一个查询中插入所有标记,传递不同的值组。