到目前为止,我有以下表格
表格-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_mytags
和mytasks.task_id
插入mytags.tag_id
表中,现在确定如果有超过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表,就可以进行一些更改并将它们一起提交。对数据库的其他任何请求都看不到处于部分完成状态的更改。