2017-04-12 70 views
0

我想在我的表中插入多行,此查询的数据是从前端获取的。此查询中的一列不从前端传递,其值从另一个表的查询执行时间确定。我可以把这些数组放在循环中&执行一个SELECT查询&对每个项目执行一个INSERT查询,但我想避免它,因此我创建了一个大的INSERT查询!直到这里一切都好,但现在,一个值应该从另一个表!MySQL INSERT ... SELECT仅用于一列

我可以使用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", 
    ), 
); 

假设这是阵列I从前端得到的,每一个键是产品ID包含其它描述为在车产物。现在我会在Orders表中插入这个,但价格是缺少的,我必须从Products表中取得!我可以使用产品ID执行select

类似的问题:

这个答案采用伪造列:

MYSQL INSERT SELECT problem

从接受的答案复制:

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

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

我研究这个话题,但无法找到所需的答案:(

+0

HPW你涉及这两个表?有没有一对一或一对多的关系? – manian

+0

@manian用虚拟场景更新了我的问题以提供一个想法。对于每个项目,一旦从其他表格返回一个值。 – demonofthemist

回答

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

我拿出根据我对你的问题的理解这些代码。让我知道,如果它的工作原理。

这种做法只是打DB只有两次。