在Update SQL中执行OPERATION(加,减,乘,除)

时间:2011-04-04 10:55:03

标签: php mysql

如何在SQL中对所选表和行执行加,减,乘或除操作?

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

$idArr = $_POST['checkboxId'];

foreach($idArr as $index=>$value)
{
    $id = mysql_real_escape_string($value);

    // Get Quantity from this item id
    $sql = "SELECT quantity FROM items WHERE item_id = '$id'";
    $result = mysql_query($sql);
    $quantity = $row['quantity'];

    // New quantity after minus by 1
    $new_quantity = $row['quantity'] - 1;

    // Update new quantity to this item
    $sql = "UPDATE items SET quantity = '$new_quantity' WHERE item_id = '$id'";
    $result = mysql_query($sql);
}

更新首选行中数量(整数)的更改是否切实可行? 我可以使用单个更新查询执行此操作吗?

5 个答案:

答案 0 :(得分:6)

为什么不将操作放在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作为数量
  • 第一位用户update s到4
  • 第二个用户update也是4 ...但是,它应该已经更新为3!

答案 1 :(得分:1)

您可以使用:

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

这比您的代码还有一个额外的优势。使用select / update时,有可能会修改select和update之间的数量。使用您的代码,此修改可能会丢失,因为它将被更新查询覆盖。使用单个查询可以确保不会发生这种情况。

答案 2 :(得分:1)

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

您还可以使用+*/

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

答案 3 :(得分:0)

UPDATE items SET Quantity = Quantity - 1 WHERE item_id = ...

答案 4 :(得分:0)

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