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
语句来做到这一点?
查询运行后,您将拥有一组复制的行(带有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)
归档时间: |
|
查看次数: |
4838 次 |
最近记录: |