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