Как вставить данные в промежуточную таблицу и можно ли это сделать одним запросом mysql? - PullRequest
0 голосов
/ 29 января 2019

У меня есть следующие таблицы на данный момент

Таблица - mytags

| tag_id | tag_name |
|    1   |   home   |
|    2   |   work   |

TABLE - mytasks

| task_id |     task_name     |
|    14   | do my the dishes  |
|    12   | Make presentation |

TABLE - mytasks_mytags

| mytag_id | mytask_id |
|     1    |    14     |
|     2    |    14     |

Теперь каждый раз, когда пользователь создает новые задачи, я делаю запись в таблицу mytasks, Что яхотел бы знать, как мне также сделать запись в таблице mytasks_mytags?Я новичок в MySQL, так что извините, что я полный нуб.поэтому предположим, что пользователь использует задание со следующими тегами:

"сделать презентацию и получить кофе" (задача) - ["работа", "" домой] (теги)

Как вы видите, задачи имеют 2 тега, как мне вставить в таблицу mytasks_mytags идентификатор task_id, а также идентификаторы 2 тегов ??

Таким образом, в основном каждый раз, когда создается задача, я думаю выполнить следующие шаги:

  • ВСТАВИТЬ задачу в таблицу mytasks.

  • магазин вернул идентификатор

  • ПОЛУЧИТЬ идентификаторы тегов, которые выбрал пользователь.

  • СЕЙЧАС ВСТАВЬТЕ в mytasks_mytags таблицу mytasks.task_id, а такжеmytags.tag_id, теперь уверен, как бы я вставил, если есть более 1 тега ... любая помощь?

Если я не совсем уверен, пожалуйста, дайте мне знать.я могу сломать это дальше.

1 Ответ

0 голосов
/ 29 января 2019

INSERT может вставлять только в одну таблицу в данном выражении.Вам нужно будет сделать как минимум два оператора.

Сначала вставьте в таблицу mytasks:

INSERT INTO mytasks (task_name) VALUES ('make presentation and get coffee');

Затем выполните оператор INSERT...SELECT, в котором SELECT соответствует нескольким строкам, чтобы вы моглиполучить соответствующие значения mytag_id.Используйте LAST_INSERT_ID(), чтобы получить значение только что вставленного mytask_id (я предполагаю, что это столбец с автоинкрементом).

INSERT INTO mytasks_mytags (mytag_id, mytask_id)
  SELECT tag_id, LAST_INSERT_ID() FROM mytags
  WHERE tag_name IN ('home','work');

Приведенный выше SELECT выбирает tag_id из каждой строки и использует последний сгенерированныйid из предыдущей INSERT в качестве второго столбца в каждой строке.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...