【问题标题】:How to UPDATE all rows in SQL with one query?如何使用一个查询更新 SQL 中的所有行?
【发布时间】:2014-01-10 21:16:42
【问题描述】:

我有一个现有的 Prestashop 数据库,我对它做了一些小的修改。我制作了一个单独的 PHP 页面,它从包含产品的表中获取数据(仅我需要的数据),并一个接一个地向我显示该表中的所有产品。我还有一个更新产品的功能,我在上面按 EDIT。

因此,简而言之,我可以每次点击更新单个产品。但是现在我有大约 220 种产品,为了更新每个产品的价值(价格),现在我必须为每个产品单击 EDIT 220 次。

有没有办法在我单击按钮后进行查询以更新所有行?

下面我将向您展示我的脚本中的一些基本部分:

GET 函数:

<?php

$strSQL = "SELECT * FROM ps_product";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");

while($objResult = mysql_fetch_array($objQuery))
{
?>
<!-- HTML CODE -->
<? } ?>

每个产品的更新功能

if($_POST["hdnCmd"] == "Update")
{
    $strSQL = "UPDATE ps_product_shop SET ";
    $strSQL .="id_product = '".$_POST["txtEditid_product"]."' ";
    $strSQL .=",price = '".$_POST["txtEditprice"]."' ";
    $strSQL .=",active = '".$_POST["txtEditactive"]."' ";
    $strSQL .="WHERE id_product = '".$_POST["hdnEditid_product"]."' ";
    $objQuery = mysql_query($strSQL);
    if(!$objQuery)
    {
        echo "Error Update [".mysql_error()."]";
    }

}

$_POST["hdnEditid_product] 是取自表的产品 ID 值。


请帮助我了解如何制作类似的 **UPDATE 函数** **会一次更新所有行 (product_id)?

作为一个例子,我必须解决这个代码:

if($_POST["UPDATEALLPRODUCTS"] == "Update")
{
    $strSQL = "UPDATE ps_product_shop SET ";
    $strSQL .=",price = '".$_POST["txtEditprice"]."' ";
    $strSQL .="WHERE id_product = '".$_POST["hdnEditid_product"]."' ";
    $objQuery = mysql_query($strSQL);
    if(!$objQuery)
    {
        echo "Error Update [".mysql_error()."]";
    }
}

但我必须在这里添加/更改:

$strSQL .="WHERE id_product = '".$_POST["hdnEditid_product"]."' ";

【问题讨论】:

  • 每款产品都有不同的价格价值!
  • 你为什么不调用任何 jQuery/ajax 脚本,通过调用脚本来更新它在失去 pricebox 的焦点时的相应记录。而不是在填充 recoed 后单击更新。它会让你更容易
  • 你想更新所有行的价格
  • 是的...我很乐意

标签: php mysql


【解决方案1】:

要将所有行更新为相同的值,请运行此查询

UPDATE ps_product_shop SET price='".$_POST["txtEditprice"]."';

注意:ps_products_shop 中的每条记录都将获得相同的价格值。

【讨论】:

  • 感谢您的重播!但我想你的回答是全球性的。在我的情况下,每个产品都有不同的价格,查询如何知道产品 ID 及其价格?
  • 等等,你的意思是你想改变输入字段中的值,然后对每个 id 的所有行运行更新查询?那么这是一个php问题而不是MySQL
  • 值正在通过不同的 php 脚本在我的前端进行更新。这现在很完美。这是一个数学计算,它改变了每个产品的价格值。这个值在每个产品字段中。
【解决方案2】:

这个怎么样?

创建一个这样的数组:id => price,然后:

        $prices = array(
            1=>300,
            5=>180,
            ...
        );
        foreach ($prices as $id => $price) {
            $query = "UPDATE ps_product_shop SET price='".$price."' WHERE 
            id_product='".$id."' ";
            mysql_query($query);
        }

【讨论】:

  • 你能做这个数组吗?
  • 我认为你的回答很纯粹!但我会尝试对其进行一些更改。我的意思是我希望根据 DATABASE 中的旧值生成 id 和值....
【解决方案3】:

一种方法,如果您坚持使用单个查询:

<?php
    $product_updates = array("1" => "500", "2" => "1299.99");
    $sql_query = "UPDATE my_database.products SET price = CASE id ";
    foreach ($product_updates as $key => $value) {
        $sql_query .= "WHEN '$key' THEN '$value' ";
    }
    $sql_query .= "END;";
    mysql_query($sql_query);
?>

【讨论】:

    【解决方案4】:

    我假设该页面已经包含您需要的更新价格/信息,因此它只是将 php 变量提取出来

    UPDATE ps_product_shop SET price
     = CASE 
     WHEN id_product= $id_product_1
     THEN '$edited_price_1'
     WHEN id_product = $id_product_2
     THEN '$edited_price_2'
    

    如果没有看到表单结构,很难看到正确的变量名称是什么,但希望您可以使用代码并使用它,我必须做类似的事情并让 PhP 使用这种方法自动构建查询

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      相关资源
      最近更新 更多