代码之家  ›  专栏  ›  技术社区  ›  Alexander Solonik

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

  •  1
  • Alexander Solonik  · 技术社区  · 7 年前

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

    表-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的新手,所以请原谅我是一个彻头彻尾的noob。因此,假设一个use使用以下标记生成一个任务:

    “做演讲,喝咖啡”(任务)-[“工作”,“家] (标签)

    如您所见,任务有2个标记,我如何将任务id和2个标记id插入mytasks\u mytags表中??

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

    • 存储返回id

    • 检索用户选择的标记的id。

    • 现在插入到 mytasks\u mytags mytasks.task_id 而且 mytags.tag_id

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Bill Karwin    7 年前

    INSERT在给定语句中只能插入到一个表中。你必须至少做两个陈述。

    首先在mytasks表中插入:

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

    然后做一个测试 INSERT...SELECT 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从每一行获取标记id,并使用上一次插入中最后生成的id作为每一行的第二列。

    由于您可能希望任务和标记显示为数据库中的单个更改,因此可以使用 交易