如何在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); }
更新首选行中数量(整数)的更改是否切实可行? 我可以使用单个更新查询执行此操作吗?
答案 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'";