【问题标题】:Execute OPERATION (plus, minus, multiply, divide) in Update SQL在 Update SQL 中执行 OPERATION(加、减、乘、除)
【发布时间】:2011-07-29 02:11:50
【问题描述】:

如何在SQL中对选中的表和行进行加减乘除运算?

以下是我手动减去原始数量以创建新数量并更新到所选行的示例代码:

$idArr = $_POST['checkboxId']; foreach($idArr as $index=>$value) { $id = mysql_real_escape_string($value); // 从这个项目 id 中获取数量 $sql = "从商品中选择数量,其中 item_id = '$id'"; $result = mysql_query($sql); $数量 = $row['数量']; // 减 1 后的新数量 $new_quantity = $row['数量'] - 1; // 更新此商品的新数量 $sql = "更新项目设置数量 = '$new_quantity' WHERE item_id = '$id'"; $result = mysql_query($sql); }

更新首选行中数量(整数)的变化是一种实用的方法吗? 我可以用一个更新查询来做到这一点吗?

【问题讨论】:

  • 你可以用一条 UPDATE 语句来做到这一点 - 'UPDATE items SET quantity = quantity - 1 WHERE item_id = '$id'
  • 谢谢你们,我从来没有遇到过这个。 :)

标签: php mysql


【解决方案1】:

为什么不直接将操作放在 SQL update 查询中?


例如,您可能有这样一个查询:

UPDATE items SET quantity = quantity - 1 WHERE item_id = '$id'

或者:

UPDATE items SET quantity = quantity + 1 WHERE item_id = '$id'


很大的优势:这是在单个 SQL 查询中完成的(没有select,然后是update;这意味着如果两个用户尝试同时执行此操作不会有任何问题:SQL 将处理并发,并且一个接一个地执行查询。

使用您的初始解决方案,您可能会有 (如果您很不幸 - 但会发生这种情况)

  • 第一个用户执行select,得到 5 作为数量
  • 第二个用户执行select,得到 5 作为数量
  • 第一个用户updates to 4
  • 第二个用户updates 也是 4...但是,它应该已经更新到 3 了!

【讨论】:

    【解决方案2】:
    $sql = "UPDATE items SET quantity = quantity - 1 WHERE item_id = '$id'";
    

    您也可以使用+*/

    http://dev.mysql.com/doc/refman/5.0/en/arithmetic-functions.html

    【讨论】:

      【解决方案3】:

      你可以使用:

      $sql = "UPDATE items SET quantity = quantity - 1 WHERE item_id = '$id'";
      

      这比您的代码有一个额外的优势。当使用选择/更新时,有可能其他东西会修改选择和更新之间的数量。使用您的代码,此修改可能会丢失,因为它将被更新查询覆盖。使用单个查询保证不会发生这种情况。

      【讨论】:

        【解决方案4】:
        $sql = "UPDATE items SET quantity = quantity - 1 WHERE item_id = '$id'";
        

        【讨论】:

          【解决方案5】:
          UPDATE items SET Quantity = Quantity - 1 WHERE item_id = ...
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-10-15
            • 2021-11-01
            相关资源
            最近更新 更多