使用php删除和更新mysql中的标签

时间:2011-05-11 19:09:42

标签: php mysql tags

如果您有以下表格结构:

item: id, content ect
item_tags: item_id, tag_id
tags: id, name

一个项目可以有多个标签。

我使用以下代码选择属于某个项目的标签:

SELECT GROUP_CONCAT( DISTINCT tag.name
ORDER BY tag.name DESC
SEPARATOR ',' ) AS tags
FROM item_tags
JOIN tag ON item_tags.tag_id = tag.id
WHERE item_id =1

您会使用哪些策略[*]更新某个项目的代码?

我虽然做了以下事情:

  
      
  1. 从数据库中获取标签original_tags
  2.   
  3. 获取用户更新的标签为changed_tags
  4.   
  5. 从数据库中删除属于此项目的所有标记
  6.   
  7. 找到changed_tags和original_tags之间的区别并添加   这些到数据库。
  8.   

查看特定项目的每个标记,看看是否还添加了一个标记,其中一个已被删除,或者如果拼写已更改,则看起来过于复杂,因此删除所有标记并为此添加新标记的理由项目

你怎么想?

*我不是在寻找实际的代码 - 尽管那很不错

2 个答案:

答案 0 :(得分:0)

我在CF设置中这样做,所以我不能给你一个相关的代码示例。但这是我的步骤:

 1. Get all the tags from the DB for the item in question
 2. Put all the tags the user entered into an array
 3. Loop on all the tags from the DB
 4. Sub Loop on all the user supplied tags
  4a. if there is a match then remove that tag from the user supplied array, 
  4b. if no match after going through the whole subloop delete the tag.
 5. Loop what is left in the user supplied array inserting them into the DB

注意:如果我找到匹配项,我会跳出子循环并转到下一个父循环项以保存处理。

答案 1 :(得分:0)

我认为你根本不需要检索原始标签。您可以发出REPLACEINSERT ... ON DUPLICATE KEY UPDATE查询,以便将您收到的代码与数据库中的代码同步。然后,您需要删除不在新列表中的所有标记(如果所有不在changed_tags列表中的标记都应删除)或标记为要删除的标记(如果changed_tags中的标记有删除标志)。