【问题标题】:PHP, MySQL Update multiple columnsPHP,MySQL 更新多列
【发布时间】:2017-01-18 10:02:55
【问题描述】:
$mengetotzut = 7','8','9','22','23','24','25 ;
$zutatiddd = 42','75','8','90','23','82','33 ;
$sql5= "UPDATE zutaten SET Menge=('$mengetotzut') WHERE Zutat_ID IN('$zutatiddd')";
 $run_query = mysqli_query($con,$sql5);

SQL 语句的样子:

UPDATE zutaten SET Menge=('42','75','8','90','23','82','33') WHERE Zutat_ID IN('7','8','9','22','23','24','25')

我想做的是:

Update Menge='42' Where Zutat_ID is '7' AND Update Menge ='75' Where Zutat_ID = '8' ...

但在一个 SQL 语句中。有人可以告诉我这是否可行,我该怎么做?

【问题讨论】:

  • 为什么不使用 foreach 和循环
  • @coder ai 怎么能做到这一点?
  • 您不能在一个查询中进行多次更新。您可以使用“ON DUPLICATE KEY UPDATE”子句进行多次插入来完成您的目的。你可以在这里找到解释:stackoverflow.com/questions/3432/multiple-updates-in-mysql
  • 通过简单的 for 或 foreach 循环,您可以遍历 $mengetotzut 和 $zutatiddd 数组。您不能为您的目的执行单个 sql 语句。您必须执行与数组中的项目一样多的更新语句。在重复键上插入假定严格规范化的数据结构。但是试试 SBO 的评论。
  • @SBO 是的,您可以,链接问题中的第二个答案显示您可以使用 CASE。

标签: php mysql sql-update multiple-columns


【解决方案1】:

考虑到两个数组的计数相同,试试下面的

$count = 7;

for ($i=0; $i<$count; $i++) {
    $sql5= "UPDATE zutaten SET Menge=$mengetotzut[$i] WHERE Zutat_ID = $zutatiddd[$i]";
    $run_query = mysqli_query($con,$sql5);
}

【讨论】:

    【解决方案2】:

    使用 foreach 循环

    foreach( $mengetotzut as $index => $code ) {
    $sql5= "UPDATE zutaten SET Menge=('$code') WHERE Zutat_ID = $zutatiddd[$index];
     $run_query = mysqli_query($con,$sql5);   
    }
    

    【讨论】:

    • 我在 $code ) { $sql5= "UPDATE zutaten SET Menge=('$code') WHERE Zutat_ID = $zutatiddd[$ index]; $run_query = mysqli_query($con,$sql5); } ?> 他将我显示为错误。
    【解决方案3】:

    您可以一次性使用SQL 查询UPDATE,如下所示:

    UPDATE zutaten AS t1
    JOIN (
        SELECT 7 AS Zutat_ID, 42 AS Menge
        UNION ALL
        SELECT 8, 75
        UNION ALL
        SELECT 9, 8
    ) t2 ON t1.Zutat_ID = t2.Zutat_ID
    SET t1.Menge = t2.Menge
    

    【讨论】:

    • 问题是数字可以改变这一点,因为在我的代码中我有更多的 sql 语句并且数字可以改变为什么我想从变量中做到这一点
    【解决方案4】:

    您所追求的是CASE,您的查询将如下所示:

    UPDATE zutaten SET Menge = CASE Zutat_ID
        WHEN 42 THEN 7
        WHEN 75 THEN 8
        WHEN 8 THEN 9
        WHEN ...
    END WHERE Zutat_ID IN (42,75,8,...)
    

    【讨论】:

    • 问题是数字可以改变这一点,因为在我的代码中我有更多的 sql 语句并且数字可以改变为什么我想从变量中做到这一点
    • @CristianCănănău 很棒,所以使用变量动态地编写它。添加一个输出WHEN THEN部分的for循环并不难。
    • 你能给我看代码吗?我的变量 $mengetotzut = 7','8','9','22','23','24','25 ; ---- 看起来像这样 $zutatiddd = 42','75','8','90','23','82','33 ; ---- 看起来像这样
    • @CristianCănănău 我不会为你编写代码,这不是代码编写服务。如果你连基本的 for 循环都不会写,那就去做一些关于 basic PHP 的教程。
    • 我该怎么做呢?因为我尝试了更多选择,而你没有工作?
    猜你喜欢
    • 2012-05-03
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多