如果我有像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
答案 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
条目,然后重新插入要保留的标记。