我正在实施基于this推荐的标签云系统。 (但是,我没有使用外键)
我允许最多25个标签。我的问题是,如何处理项目的编辑?我有这个项目添加/编辑页面:
名称: 描述: 标签:(示例数据)计算机,书籍,网站,设计
如果有人编辑了项目详细信息,是否需要先删除Item2Tag表中的所有标记,然后添加新元素?例如,有人将数据更改为:
标签:(示例数据)计算机,书籍,网络,报纸
我是否需要删除Item2Tag表中的所有标签,然后添加这些元素?这似乎效率低下,但我能找到一种更有效的方式。
另一个问题是,如果有人编辑了描述但没有更改标签框,我仍然需要删除Item2Tag表中的所有元素并添加相同的元素。
我不是一个经验丰富的PHP编码器,所以你能建议一个更好的方法来解决这个问题吗? (纯PHP / MySQL解决方案更可取)
提前致谢,
答案 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