【发布时间】:2019-10-27 12:43:20
【问题描述】:
我有一个准备好的语句,它基本上将数组中的数据插入到表中。但是我需要从数据库中的另一个表中获取其中一列。到目前为止,我想出了这个。
$query = "INSERT INTO stockimp si (sku,stock,status,productID)
VALUES (?,?,?,(SELECT post_id FROM postmeta pm
WHERE si.sku = pm.meta_value AND pm.meta_key = '_sku')) ";
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("sss", $dbSKU, $dbStock, $dbStatus);
$mysqli->query("START TRANSACTION");
如果我删除 select 语句以获取帖子 ID 并将其设置为静态值,它将正常工作。但我现在不确定在这里采取的最佳方法。如果它只是表的直接副本,但我只是从列中获取一个值,我知道该怎么做,我不太确定。
【问题讨论】:
-
您可能会遇到的问题是,如果您的子选择返回多行。为什么不在此之前的单独查询中选择
post_id,然后将其与其余参数绑定? -
@Phil 我试图将事情保持在最低限度。数据库正在与数十万行进行交互。在一个查询中为每一行查找数据库将对资源产生相当大的影响。作为准备好的事务,它将批量运行并在瞬间完成
-
“在一个查询中为每一行查找数据库将对资源产生相当大的影响” ????你知道这是事实吗?
-
是的,我已经完成了。如果您的 loppying 每次抛出 10 万行并打开对数据库的查询以获得相当于 10 万数据库查询的值。我已经做到了,影响非常大。因此希望将其作为单个事务进行
-
@phil P.s.如果我遗漏了一些明显的东西,就说我现在是凌晨 3 点,而我此时并没有完全清醒。