我想在我的表中插入多行,此查询的数据是从前端获取的。此查询中的一列未从前端传递,其值在查询执行时从另一个表确定。我可以将这些数组放入循环和放大器中。执行一个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
。
类似问题:
这个答案使用伪造的列:
从已接受的答案中复制:
INSERT INTO website (url,fid) SELECT $site,id FROM users WHERE name = $user
这里$site
对于所有插入的记录都是相同的,我希望每个记录按照我的数组不同!
我研究这个主题但找不到想要的答案:(
答案 0 :(得分:0)
如果有帮助,请尝试使用此代码,
<?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);
根据我对您的问题的理解,我提出了这个代码。如果有效,请告诉我。
这种方法只能在数据库中击中两次。