PHP标签云系统

时间:2010-01-01 09:13:49

标签: php mysql tags

我正在实施基于this推荐的标签云系统。 (但是,我没有使用外键)

我允许最多25个标签。我的问题是,如何处理项目的编辑?我有这个项目添加/编辑页面:

名称: 描述: 标签:(示例数据)计算机,书籍,网站,设计

如果有人编辑了项目详细信息,是否需要先删除Item2Tag表中的所有标记,然后添加新元素?例如,有人将数据更改为:

标签:(示例数据)计算机,书籍,网络,报纸

我是否需要删除Item2Tag表中的所有标签,然后添加这些元素?这似乎效率低下,但我能找到一种更有效的方式。

另一个问题是,如果有人编辑了描述但没有更改标签框,我仍然需要删除Item2Tag表中的所有元素并添加相同的元素。

我不是一个经验丰富的PHP编码器,所以你能建议一个更好的方法来解决这个问题吗? (纯PHP / MySQL解决方案更可取)

提前致谢,

2 个答案:

答案 0 :(得分:0)

你应该在Item2Tag表上有一个主键,所以只需尝试插入新标签的链接 - 但是如果item2tag链接已经存在,则会出错。根据您使用的DBMS,有不同的处理方式。 MySQL提供以下语法:

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

相当于:

UPDATE table SET c=c+1 WHERE a=1;

如果记录已存在。

对于您的第二个问题,如果项目的item_id未更改,则您不需要更改标记。 Item2Tag表将项目链接到标签,但如果item_id保持不变,则无需更改标签。

答案 1 :(得分:0)

在你的系统中,你已经知道当前的标签,所以你可以做的是做一个增量。

要使用您自己的示例,这些是起始标记: 电脑,书籍,网站,设计

有人改变了这一点: 电脑,书,网站,报纸

// Quick & dirty example (pseudo)code
$current_tags = array('computer', 'book', 'web', 'design');
$new_tags = array('computer', 'book', 'web', 'newspaper');

foreach ($new_tags as $key => $new_tag) {
  if (!in_array($new_tag, $current_tags) {
    $tags_to_add[] = $new_tag;
  } else {
    // Delete item from $current_tags
  }
}
// Now delete the items left in $current_tags
// And then add the items in $tags_to_add