【问题标题】:How to save tags/keywords from array to database with php?如何使用 php 将标签/关键字从数组保存到数据库?
【发布时间】:2011-05-21 09:16:40
【问题描述】:

我看到了这个问题:how to save tags(keywords) in database?

关于如何构建数据库的好答案。但是哪种方式最好在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());
    }
?>

【问题讨论】:

    标签: php mysql tags keyword saving-data


    【解决方案1】:

    我建议选择当前标签,然后你可以这样做:

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

    之后,您编写 2 个普通查询:一个用于批量插入,一个用于删除。

    【讨论】:

    • @zerkms 这个答案真的很有趣。所以我首先将数据库中的帖子标签和标签保存为每个数组?然后首先从数据库中运行一个while循环并匹配$tags_to_add,并将它们添加到数据库中尚未存在的它们。然后做一个新的数据库while循环来匹配要移除的标签?
    • @Peter Westerlund:批量插入:INSERT INTO table (field) VALUES ('val1'), ('val2'), ...。删除DELETE FROM table WHERE field IN ('val1', 'val2', ...)。所以你只需要2个查询。但首先您需要查询所有 当前存在的标签 ($old) 并与 $new 进行比较
    • @zerkms 是否有必要拥有所有表格“posts”、“tags”和“post_tags”?它有点破坏它,因为如果没有留下带有该标签的帖子,我希望表“标签”中的标签行自动消失。
    • @Peter Westerlund:什么原因?
    • @zerkms 因为在每次标签循环迭代之后我还需要另一个查询,检查“post_tag”表中是否还有这些标签,如果没有,那么另一个查询运行以从“标签”表中删除标签。
    猜你喜欢
    • 2011-05-28
    • 2018-02-17
    • 1970-01-01
    • 2016-03-23
    • 2014-09-22
    • 2012-09-29
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多