【问题标题】:Remove tag from database从数据库中删除标签
【发布时间】:2011-10-21 00:55:26
【问题描述】:

如果我有一个像 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

【问题讨论】:

  • 您可以获取带有$tags = array_map('trim', explode(',', $input));$tags = preg_split('/\s*,\s*/', $input);的标签。
  • 澄清:问题不在于表或数据库设计。是关于从数组中删除标签。

标签: php mysql tags


【解决方案1】:

这最好实现为多对多关系。

您可以使用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 条目并重新插入要保留的标签。

【讨论】:

  • 当索引正确时,这将形成一个非常强大的标记系统,您可以在其中查询每个事物的标签,并且非常容易地查询每个标签的事物。
  • 但是你使用了 foreach ?一个数组,并检查删除了哪些值?问题是
  • @Daniel 在执行删除查询之前,您需要知道问题和标签 ID,但检索这些应该是微不足道的。如果你在TAG.tag上设置了一个唯一的约束,你甚至可以通过它的文本表示找到一个标签
  • 谢谢,我将使用第二种方法。删除所有标签并重新插入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
相关资源
最近更新 更多