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

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

问题描述:

我看到了这个问题:how to save tags(keywords) in database?如何使用PHP将标签/关键字从数组保存到数据库?

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

我建议选择当前标签后,你可以这样做:你写2个琐碎查询

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

之后:一个用于批量插入,一个用于删除。

+0

@zerkms这个答案真的很有趣。所以我开始将数据库中的帖子标签和标签保存为每个数组?然后首先从数据库运行一个while循环,并使用'$ tags_to_add'进行匹配,并将它们添加到数据库中不存在的数据库中。然后做一个新的数据库while循环来匹配标签去除? – 2011-05-21 09:47:03

+0

@Peter Westerlund:批量插入:'INSERT INTO表(字段)VALUES('val1'),('val2'),...'。删除'DELETE FROM table WHERE field IN('val1','val2',...)'。所以你只需要2个查询。但首先你需要查询所有**现有的**标签('$ old'),并用'$ new'来区分它 – zerkms 2011-05-21 09:50:44

+0

@zerkms是否有必要将所有表的'posts','tags'和'post_tags '?它破坏了一点,因为我希望表格“标签”中的标签行自动消失,如果没有该标签留下的帖子。 – 2011-05-21 11:25:47