2011-05-21 28 views
6

我看到了這個問題: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()); 
    } 
?> 

回答

4

我建議選擇當前標籤後,你可以這樣做:你寫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

相關問題