Mysql用数组设置值

时间:2017-02-07 17:26:58

标签: php mysql

如果像$ids=['key1'=>'value1','key2'=>'value']这样的数组中的ID,是否有可能更新MySql表。 $ids个键是MySql表中的ID!

我可以遍历$ids并执行类似

的操作
foreach($ids as $key=>$value)
  do_query(UPDATE table SET column=$value WHERE $id=$key);

但是想要在一个查询中执行所有更新,而不是执行count($ids)个查询!

3 个答案:

答案 0 :(得分:1)

试试这个:

$idsIn='';
$ids=['key1'=>'value1','key2'=>'value'];
$case='';
foreach($ids as $key=>$value){
  $idsIn.=($idsIn=='')?"'$key'":','."'$key'";
  $case.=" WHEN '$key' THEN '$value'";
}

$sql = "UPDATE table set column= (CASE id $case END) WHERE id in($idsIn)";

返回:

UPDATE table set column= (CASE id  WHEN 'key1' THEN 'value1' WHEN 'key2' THEN 'value' END) WHERE id in('key1','key2')

答案 1 :(得分:0)

您可以循环遍历for以生成包含您的语句的巨型字符串,并且在每个循环中,您将为WHERE子句添加另一个条件。像这样:

$length = count($ids);
$statement = "UPDATE table set column=$value";
for ($i = 0; $i<$length; $i++){
if ($i == 0){ //checking if it is the first loop
$statement.= " WHERE $id = $ids[$i]";
}
else{
$statement.= " OR $ id = $ids[$i]";
}
}

然后你将基于$ statement执行你的查询。我认为这不是最好的事情,但我相信它可以解决你的问题。

答案 2 :(得分:0)

你可以尝试从你已经拥有的数组中生成一个与你想要更新的id的逗号分隔字符串,例如&#34; 1,2,3,4,5&#34;有了这个,你可以在mysql中进行批量更新,如下所示:

update table
set column = 'new value'
where id in (1, 2, 3, 4, 5);

只需将此查询生成为字符串并连接id并在php中执行它。