Php 在一个查询中使用不同的值更新每组行

Php 在一个查询中使用不同的值更新每组行,php,mysql,Php,Mysql,我有一个这样的桌子结构 和一个php数组,如下所示 $assign=array("sFirst"=>array("101","102","103"),"sSecond"=>array("104","105"),"sThird"=>array("106")); $sql2="update stack set status=1,supervisor='sFirst' where reg_id in (" . implode(",", $assign['sFirs

我有一个这样的桌子结构

和一个php数组,如下所示

$assign=array("sFirst"=>array("101","102","103"),"sSecond"=>array("104","105"),"sThird"=>array("106"));
$sql2="update stack set status=1,supervisor='sFirst'
       where reg_id in  (" . implode(",", $assign['sFirst']) . ")";
我的问题 我想将上表的status列更新为1,supervisor列更新为regu id值所在数组的键 存在于数组中,因此表的外观如下 最终桌面外观

我的尝试 我只知道如何在单个数组中而不是在多个数组中完成 如下图所示

$assign=array("sFirst"=>array("101","102","103"),"sSecond"=>array("104","105"),"sThird"=>array("106"));
$sql2="update stack set status=1,supervisor='sFirst'
       where reg_id in  (" . implode(",", $assign['sFirst']) . ")";

你在找这个吗

foreach ($assign as $key => $value)
{
$sql2="update stack set status=1,supervisor=$key
       where reg_id in  (" . implode(",", $value) . ")";
//execute query here
}
编辑: 在不知道其他解决方案的情况下,如果您只想进行一次查询。 您可以创建一个循环来生成查询。 类似这样的东西

$case="case "
$in=""
foreach ($assign as $key => $value)
    {
    $imploded=implode(",", $value);
    $case=$case . " when reg_id in  (" . $imploded . ") then " .$key ;
    $in= in . $imploded;
    $sql2="update stack set status=1,supervisor=" . $case . " end 
       where reg_id in  (" . $in . ")";
    }

您需要考虑逗号,因为我没有注意。

如果您真的想避免在for循环中执行查询, 下面的代码将给出一个更新查询,该查询将按预期更新记录

<?php

$assign=array("sFirst"=>array("101","102","103"),"sSecond"=>array("104","105"),"sThird"=>array("106"));

$supervisorUpdate = "( CASE ";
$whereArr = array();
foreach($assign as $key=>$value){
    $supervisorUpdate .= " WHEN reg_id IN (" . implode(",", $value) . ") THEN '$key' ";
    $whereArr[] = implode(",", $value);
}
$where = " WHERE reg_id IN (" . implode(",", $whereArr) . ") " ;

$supervisorUpdate .= " ELSE supervisor END )" ;

$sql = "update stack set status=1, supervisor = " . $supervisorUpdate  . $where;

请参阅:查看您帖子的最后一个链接。感谢您的解决方案。但我不想这样循环,我不知道是否有alternative@emmyfelico有什么理由避免循环吗?例如,我正在考虑它的性能影响,以避免在运行时执行时间的问题server@emmyfelico请参阅我编辑的答案。也许这会有帮助。您的代码非常有用,但我无法接受,因为新手可能无法修复逗号错误,而逗号错误目前使其无法正常工作。非常感谢。