MySQL 使用新 ID 插入两个表

jfr*_*k53 5 mysql insert transaction select

我正在尝试选择数据库中已有的数据,并使用从表一生成的 ID 将其插入到两个表中。

table1包含配置选项,table2包含定价数据。Table2使用来自 的自动 ID table1

我有所有这些产品,Table1我必须在该表的另一个组中使用相同的配置选项,但 WHMCS 没有配置选项的副本。

我正在考虑进入表格并运行一个选择查询,如下所示:

INSERT INTO tblproductconfigoptionssub 
    (
        id
        , configid
        , optionname
        , sortorder
        , hidden
    ) 
SELECT 
    NULL
    , 76
    , optionname
    , sortorder
    , hidden 
FROM tblproductconfigoptionssub 
WHERE configid = 41
Run Code Online (Sandbox Code Playgroud)

这适用于第一个表中的数据,通过从配置组 ID 41 中选择所有记录并重新插入它们,除了现在它们链接到配置组 76。

表 2 包含定价数据,它有一个名为的列relid,该列链接到从上面的 tblproductconfigoptionssub 生成的 ID。

表 2 已经在其原始 ID 下为表 1 中的项目定价。必须复制 Table2 中的记录,但使用上述查询生成的新 ID。

如何修改上面的语句以将新数据和价格一起插入到 Table2 中?

我真的不想为此做一个 PHP 脚本。但是,我想我需要创建一个 MySQL 函数来从配置组 41 中选择所有项目,然后将值存储在变量中。然后插入到两个表中。

有没有办法用INSERT语句来做到这一点?

ype*_*eᵀᴹ 3

查询运行后,您将拥有一组复制的行(带有configid=41)和一组相同的粘贴行(除了configid=76和自动创建的id)。

由于这些 id 事先并不知道,因此您需要另一种方法来识别配置表的行,例如唯一键(除了自动递增键之外),这样您就可以将新创建​​的行与旧的。

例如,如果(configid, optionname)是唯一的,则以下内容将起作用:

INSERT INTO pricing
    ( relid, price, ... )          --- relid and all the other columns, 
                                   --- except any autoincrement you may have
SELECT pasted.id, p.price, ....    --- and the same columns here
FROM 
    pricing AS p
  JOIN
    tblproductconfigoptionssub AS copied
      ON  copied.id = p.relid
      AND copied.configid = 41 
  JOIN
    tblproductconfigoptionssub AS pasted
      ON  pasted.optioname = copied.optioname
      AND pasted.configid = 76 ;
Run Code Online (Sandbox Code Playgroud)