繁体   English   中英

MySQL INSERT…SELECT仅用于一列

[英]MySQL INSERT…SELECT for one column only

我想在表中插入多行,此查询的数据是从前端获取的。 此查询中的一列未从前端传递,其值是在查询执行时从另一张表确定的。 我可以将这些数组放入循环中,并对每个项目执行一个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问题

从接受的答案中复制:

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);

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

这种方法仅两次击中数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM