开发标签系统 - 如何用新标签更新当前标签?
我正在为我的网站设计一个标记系统(一个定制的博客)。这是我的源代码开发标签系统 - 如何用新标签更新当前标签?
<b>Please enter your tags, separating each one with a comma.<b><br>
<input type="text" name="tags" size=50>
$taginput = $_POST["tags"];
$tagarray = explode(",",$taginput);
for($i=0;$i<count($tagarray);$i++){
$usetag = mysql_real_escape_string(stripslashes(ltrim(rtrim($tagarray[$i]))));
if($usetag == "") continue;
$query = "INSERT INTO tags (item_id,tag) VALUES ($itemid,'$usetag')";
mysql_query($query);
}
CREATE TABLE `tags` (
`uid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`item_id` INT(11) NOT NULL,
`tag` VARCHAR(50) NOT NULL
) ENGINE = MYISAM ;
哪里item_id
是博客文章ID和tag
是标签名称
现在我正在寻找如何,如果我与标签更新后的解决方案..我该怎么删除目前的标签,并用新的标签取代它?以及如何删除一些特定的现有标签并将其替换为新的?
这样,
标签由标签取代衬衫,服装,进场:T恤,旧,销售
和
标签:衬衫,服装,进场标签:衬衫,旧,来港定居人士
我的同类o如果可能的话,要防止使用重复标签名称过度填充tags tables
。请帮助..
为了避免重复的代码,你需要在其他许多表许多关系
create table `items_tags` (
`item_id` int(10) unsigned not null default 0,
`tag_id` int(10) unsigned not null default 0,
primary key (`post_id`, `tag_id`),
)
create table `tags` (
`id` int(10) unsigned not null auto_increment,
`tag` varchar(100) not null default '',
primary key (`id`),
unique key (`tag`)
)
PS - 一个unsigned int只有10字符长,而不是11
我不会式出所有的代码给你,但是当表单被提交时,你在标签表上输入“INSERT IGNORE”,选择ID的where标签IN(),从items_tags中删除where item_id =,最后插入到items_tags中每个标签id的记录当前物品ID。
我建议你开始学习pdo。它使事情变得更容易。你还应该有级联删除的外键约束,所以当一个项目或标签被删除时,它的items_tags表中的引用也被删除。
检索所有标签为一个帖子很简单:
select i.*, t.* from items as i left join items_tags as it on (it.item_id = i.id) left join tags as t on (it.tag_id = t.id) where i.id = <current item id>
希望有所帮助。
您可以在表中添加一个名为modifiedOn
的新列。然后,无论何时插入或更新该表中的一行,都应将modifiedOn
列设置为当前时间。
这将允许您使用INSERT ... ON DUPLICATE KEY UPDATE ...
,然后在插入所有新标签后,只需删除在插入查询中使用之前修改过的给定项目标识的标签。您应该也可以在交易中执行此操作。
你可以只
DELETE FROM `tags` WHERE `item_id` = $itemid;
您运行循环之前。
注:我会考虑逃避(至少)或切换到存储过程(最好的情况),以确保您的应用程序免受SQL injection的风险。
或者,也可以使用'REPLACE INTO'(假设('item_id','tag')上的唯一键))的变体。 – 2012-03-18 17:40:54
对不起,最近的回复..我不知道如何开始你的解决方案..你能提供一个代码或更好地解释它的东西吗?谢谢。 – Ken 2012-03-28 07:07:22