从数据库中删除标记

Dan*_*iel 2 php mysql tags

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

例如,最初:

PHP, JQUERY, ARRAYS
Run Code Online (Sandbox Code Playgroud)

保存问题和发布,

我改变主意了,我会删除JQUERY,所以我把我的问题编辑成只有两个标签:

PHP, ARRAYS
Run Code Online (Sandbox Code Playgroud)

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

任何的想法?谢谢!

澄清问题:

我有一张很多桌子

$first = array (php, jquery, arrays)

question1 | php
question1 | jquery
question1 | arrays
Run Code Online (Sandbox Code Playgroud)

编辑后,我将(目标):

$first = array (php, jquery)

question1 | php
question1 | jquery
Run Code Online (Sandbox Code Playgroud)

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

问题是如何?

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

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

question1 | php
question1 | jquery
question1 | arrays
Run Code Online (Sandbox Code Playgroud)

Phi*_*hil 5

这最好是作为多对多关系实现的.

您可以使用联结表执行此操作.例如

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)
Run Code Online (Sandbox Code Playgroud)

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

DELETE FROM `QUESTION_TAG`
WHERE `question_id` = :question_id
AND `tag_id` = :tag_id
Run Code Online (Sandbox Code Playgroud)

更新

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

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

  • 正确编制索引后,这就形成了一个非常强大的标记系统,您可以非常轻松地查询每个事物的标记和每个标记的内容. (2认同)