Удалить тег из базы данных

#php #mysql #tags

#php #mysql #Теги

Вопрос:

Если у меня есть система тегов, такая как 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. Вы можете получить теги с $tags = array_map('trim', explode(',', $input)); помощью или $tags = preg_split('/s*,s*/', $input); .

2. чтобы уточнить: проблема не в дизайне таблиц или баз данных. Речь идет об удалении тегов из массива.

Ответ №1:

Это лучше всего реализовать как отношение «многие ко многим«.

Вы делаете это с помощью таблицы соединений. Например

 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 записей для вопроса и повторной вставке тегов для сохранения.

Комментарии:

1. При правильной индексации это создает очень надежную систему тегов, в которой вы можете очень легко запрашивать теги для каждой вещи и вещи для каждого тега.

2. но вы используете foreach ? массив и проверьте, какое значение удаляется? проблема в том, что

3. @Daniel Вам нужно будет знать вопрос и идентификаторы тегов перед выполнением запроса на удаление, но их извлечение должно быть тривиальным. Если вы установите ограничение на уникальность TAG.tag , вы даже можете найти тег по его текстовому представлению

4. спасибо, я буду использовать второй подход. удалите все теги и вставьте снова.