如何使用php将标签/关键字从数组保存到数据库?

如何使用php将标签/关键字从数组保存到数据库?,php,mysql,tags,keyword,saving-data,Php,Mysql,Tags,Keyword,Saving Data,我看到这个问题: 很好地回答了数据库应该如何构造。但在php中,哪种方式是保存过程的最佳方式?处理添加和删除的过程 关键字以数组的形式发布 编辑: 当前代码如下所示: <?php $new = explode(',', $_POST['tags']); $query = mysql_query("SELECT * FROM pages_tags WHERE page_id = '".$page_id."'") or die(mysql_error()); whil

我看到这个问题:

很好地回答了数据库应该如何构造。但在php中,哪种方式是保存过程的最佳方式?处理添加和删除的过程

关键字以数组的形式发布

编辑: 当前代码如下所示:

<?php
    $new = explode(',', $_POST['tags']);

    $query = mysql_query("SELECT * FROM pages_tags WHERE page_id = '".$page_id."'") or die(mysql_error());
    while ($row = mysql_fetch_array($query))
    {
    $old[] = $row['tag'];
    }

    $tags_to_add    = array_diff($new, $old);
    $tags_to_remove = array_diff($old, $new);

    if (is_array($tags_to_add))
    {
    foreach ($tags_to_add as $add_tag) { $insert_tags[] = "('".$add_tag."', '".$page_id."')"; }
    $sql_insert_tags = "INSERT INTO pages_tags (tag, page_id) VALUES ".implode(',', $insert_tags);
    mysql_query($sql_insert_tags) or die(mysql_error());
    }

    if (is_array($tags_to_remove))
    {
    foreach ($tags_to_remove as $remove_tag) { $delete_tags[] = "('".$remove_tag."')"; }
    $sql_delete_tags = "DELETE FROM pages_tags WHERE page_id = '".$page_id."' AND tag IN (".implode(',', $delete_tags).")";
    mysql_query($sql_delete_tags) or die(mysql_error());
    }
?>

我建议选择当前标签,然后您可以:

$tags_to_add = array_diff($new, $old);
$tags_to_remove = array_diff($old, $new);

然后,编写两个简单的查询:一个用于批量插入,一个用于删除。

@zerkms这个答案非常有趣。因此,我首先将post标记和数据库中的标记保存为每个数组?然后首先从数据库运行while循环,并将
$tags\u匹配到\u add
,然后添加数据库中不存在的标签。然后执行一个新的数据库while循环以匹配要删除的标记?@Peter Westerlund:bulk insert:
插入到表(字段)值('val1')、('val2')、…
。删除
从表中删除字段('val1','val2',…)
。因此,您只需要2个查询。但首先,您需要查询所有当前存在的标记(
$old
),并将其与
$new
@zerkms进行区分是否需要所有表的“posts”、“tags”和“post_tags”?它破坏了它一点,因为我希望表“tags”中的标记行在没有带有该标记的post时自动消失。@Peter Westerlund:为什么?@zerkms因为我需要在每次标记循环迭代后进行另一次查询,以检查“post_tag”表中是否还有该标记,如果没有,然后运行另一个查询,从“tag”表中删除标记。