在一个查询中使用VALUES INSERT INTO SELECT

时间:2017-08-18 06:09:19

标签: php mysql

MYSQL和PHP新手 - 我有以下代码将在我设置的多个表中创建一个新记录但是我需要将以下代码合并在一起,因为它创建了单独的行而不是一个记录

$sql .=("INSERT INTO orders (customer_id) SELECT customer_id FROM 
customer_details;");    

foreach($result as $item){
$mysql_desc = $item['product_description'];
$mysql_mode = $item['delivery_mode'];
$mysql_cost = $item['course_cost'];
$sql .=("INSERT INTO orders(product_description, delivery_mode, course_cost) VALUES('$mysql_desc', '$mysql_mode', '$mysql_cost');");
}

我得到的结果:

enter image description here

2 个答案:

答案 0 :(得分:1)

根据您的数据,我假设您要将客户ID和php中的值插入到同一记录中。在这种情况下,您需要将它们组合到相同的insert ... select ...语句中:

$sql .=("INSERT INTO orders(customer_id, product_description, delivery_mode, course_cost) select customer_id, '$mysql_desc', '$mysql_mode', '$mysql_cost' from customer_details;");

需要注意的事项:

  1. insert ... select ...语句将为客户详细信息表中的所有客户插入相同的记录。我不确定这是否是你的最终目标。

  2. 请考虑有关旧mysql API的注释中的建议以及预准备语句的使用。

答案 1 :(得分:0)

把这更多地放在我期望发生的事情上,就像 - prepare语句那样,然后遍历每个项目并添加新行......

$insert = $connection->prepare("INSERT INTO orders (customer_id,product_description, delivery_mode, course_cost)
VALUES (?,?,?,?)");    

foreach($result as $item){
    $customerID = 1; // Have to ensure this is what your after
    $mysql_desc = $item['product_description'];
    $mysql_mode = $item['delivery_mode'];
    $mysql_cost = $item['course_cost'];
    $insert->execute([customerID,mysql_desc,mysql_mode,mysql_cost]);
}