如何多次更新字段?

时间:2014-07-30 16:39:48

标签: php mysql sql database sql-update

我有一个包含大约50个项目的数组。每个项目都是ID =>价格,我有一个称为产品的表,我需要将产品的价格更新为使用id引用的数组中的新价格

我可以使用foreach循环并执行以下操作

foreach($products as $ID => $price) {
    $result = mysqli_query($link, "UPDATE product SET price = $price WHERE id = $ID");
}

但是这最终将导致我运行近50个查询,是否有更快的方法或更好的做法?

2 个答案:

答案 0 :(得分:0)

您应该以以下格式创建更新案例查询:

UPDATE product SET price = CASE
WHEN ID = $ID1 THEN $price1
WHEN ID = $ID1 THEN $price2
END

您可以使用循环生成每个案例并执行单个查询。

为了安全起见,您也应该使用where子句,以防止在案例中不存在ID的行上更改价格。

所以要修改查询:

UPDATE product SET price = CASE
WHEN ID = $ID1 THEN $price1
WHEN ID = $ID1 THEN $price2
END
WHERE ID IN ($IDs)

以及一个工作示例:

$ids = array();
$cases = array();

foreach ($products as $id => $price) {
    $ids[] = $id;

    $cases[] = sprintf("WHEN ID=%s THEN '%s'", $id, $price);
}

$query = "UPDATE products SET PRICE CASE %s END WHERE ID IN(%s)";
$args = array(
    implode(" ", $cases),
     implode(", ", $ids)
);

$updateQuery = vsprintf($query, $args);

答案 1 :(得分:0)

您应该使用MYSQL的CASE语句

下面是小例子

  update products set price=case id
  when '6' then '2'
  when '7' then '3' 
  end
  where id in (6,7);

上述代码的作用包括案例陈述

当6 = 2解释id = 6时,然后从上面的例子中设置price = 2

 $casear=array();
 $incase=array(); 
foreach($products as $id=>$price)
{
   array_push($casear, "when '$id' then '$price'");
   array_push($incase,'$id');
} 
$casequery= implode('',$casear);
$inquery=implode(',',$incase)

//Finally executing your query 
$upquery="UPDATE Products set price=case id $casequery end where id in($inquery)";
$result=mysqli_query($link,$upquery);