从数据库中删除标记

时间:2011-10-21 00:55:26

标签: php mysql tags

如果我有像Stackoverflow这样的标签系统。我可以添加标签,保存和删除标签,或添加新标签。

例如,最初:

PHP, JQUERY, ARRAYS

保存问题并发布,

我改变主意,我会删除JQUERY,所以我将问题编辑为只有两个标签:

PHP, ARRAYS

我的问题是:插入后从数据库中删除标记的最佳方法是什么? 我需要检查删除了哪个标签。

有什么想法吗?谢谢!

澄清问题:

我有一张很多桌子

$first = array (php, jquery, arrays)

question1 | php
question1 | jquery
question1 | arrays

编辑后,我将(目标):

$first = array (php, jquery)

question1 | php
question1 | jquery

添加新标签很简单。独特的约束,foreach解决了这个问题。 但要删除标签。我需要从联结表中删除特定的标记数组

问题是如何?

所以,我有这个数组:$first = array (php, jquery)

和这个表结构(这是问题):

question1 | php
question1 | jquery
question1 | arrays

1 个答案:

答案 0 :(得分:5)

最好以多对多关系实现。

您可以使用junction table执行此操作。例如

QUESTION
========
id, -- primary key
whatever

TAG
===
id, -- primary key
tag -- probably best with UNIQUE constraint

QUESTION_TAG
============
question_id, -- composite primary key, foreign key references QUESTION (id)
tag_id -- composite primary key, foreign key references TAG (id)

要删除问题的标记,只需从QUESTION_TAG表中删除记录,例如

DELETE FROM `QUESTION_TAG`
WHERE `question_id` = :question_id
AND `tag_id` = :tag_id

更新

您最好的选择是将标记删除作为可捕获的事件。我的意思是每次删除都以某种方式处理,以便您能够捕获要删除的标记。

另一种方法是删除问题的所有QUESTION_TAG条目,然后重新插入要保留的标记。