gpt4 book ai didi

php - MySQL INSERT...SELECT 仅适用于一列

转载 作者:行者123 更新时间:2023-11-29 19:07:28 24 4
gpt4 key购买 nike

我想在表中插入多行,该查询的数据是从前端获取的。此查询中的一列不是从前端传递的,其值是在查询执行时从另一个表确定的。我可以将这些数组放入循环中并对每一项执行一个 SELECT 查询和一个 INSERT 查询,但我想避免它,因此我创建了一个大型 INSERT 查询!到目前为止,一切都很好,但现在这个值应该来自另一张表!

我可以使用INSERT...SELECT方法 https://dev.mysql.com/doc/refman/5.6/en/insert-select.html

它允许插入多行,所有匹配的行都会被插入,我可以在 SELECT 部分传递一个虚拟列值来自定义查询。但现在的问题是这些“假列”对于所有行都是相同的,它们应该在循环中,每个循环都不同!如何实现这一目标?

场景

$products = array(
"1" => array(
"product_name" => "apple",
"units" => "1",
),
"2" => array(
"product_name" => "mango",
"units" => "3",
),
);

假设这是我从前端获取的数组,每个键都是产品 ID,其中包含购物车中产品的其他描述。现在,我将其插入到 Orders 表中,但缺少价格,我必须从 Products 表中获取价格!我可以使用产品 ID 执行select

类似问题:

这个答案使用了伪造的列:

MYSQL INSERT SELECT problem

从已接受的答案中复制:

INSERT INTO website (url,fid) SELECT $site,id FROM users WHERE name = $user

这里的 $site 对于所有插入的记录都是相同的,我希望根据我的数组每个记录都不同!

我研究了这个主题,但找不到想要的答案:(

最佳答案

如果有帮助,请尝试此代码,

<?php 
$products = array(
"1" => array(
"product_name" => "apple",
"units" => "1",
),
"3" => array(
"product_name" => "mango",
"units" => "3",
),
"7" => array(
"product_name" => "mango",
"units" => "3",
),
);


$result = $conn->query("SELECT product_id, product_price FROM product_table WHERE product_id IN (".implode(',', array_keys($products)).")");
while($row = $result->fetch_assoc()) {
$prod_price[$row['product_id']] = $row['product_price'];
}

$qry = array();
foreach ($products as $key => $value) {
$qry[] = "('".$value['product_name']."', '".$value['units']."', '".$prod_price[ $key]."')";
}

$insert = "INSERT INTO orders (`product_name`, `units`, `product_price`) VALUES ".implode(', ', $qry);

我根据对你的问题的理解想出了这段代码。让我知道它是否有效。

这种方法只访问数据库两次。

关于php - MySQL INSERT...SELECT 仅适用于一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43371685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com