如何将数据插入中间表,这可以在单个mysql查询中完成吗?

时间:2019-01-29 15:19:27

标签: mysql phpmyadmin

到目前为止,我有以下表格

表格-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个标记,我该如何将task_id和2个标记id插入到mytasks_mytags表中?

因此,基本上每次创建任务时,我都在考虑执行以下步骤:

  • 将任务插入mytasks表中。

  • 商店返回的ID

  • 用户已选择标签的检索ID。

  • 现在将mytasks_mytagsmytasks.task_id插入mytags.tag_id表中,现在确定如果有超过1个标签,我将如何插入...有什么帮助吗?

如果我不清楚,请告诉我。我可以进一步分解。

1 个答案:

答案 0 :(得分:1)

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,并将上一个INSERT中最后生成的ID用作每一行的第二列。

由于您可能希望任务和标签看起来是数据库中的单个更改,因此执行此操作的方法是使用 transaction 。只要您使用InnoDB表,就可以进行一些更改并将它们一起提交。对数据库的其他任何请求都看不到处于部分完成状态的更改。