Php 在更新SQL中执行操作(加、减、乘、除)

Php 在更新SQL中执行操作(加、减、乘、除),php,mysql,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 item

如何在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); } 更新首选行中quantityinteger的更改是否切实可行? 我可以用一个更新查询来完成吗?

您可以使用:

UPDATE items SET Quantity = Quantity - 1 WHERE item_id = ...
$sql = "UPDATE items SET quantity = quantity - 1 WHERE item_id = '$id'";
$sql = "UPDATE items SET quantity = quantity - 1 WHERE item_id = '$id'";
这比您的代码有一个额外的优势。使用“选择/更新”时,可能会有其他内容修改“选择”和“更新”之间的数量。对于您的代码,此修改可能会丢失,因为它将被更新查询覆盖。使用单个查询可以保证不会发生这种情况

您还可以使用+、*和/


为什么不把操作放在SQL更新查询中呢

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

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

巨大的优势:这是在一个SQL查询中完成的,无需选择,然后更新;这意味着,如果两个用户同时尝试这样做,就不会有问题:SQL将处理并发性,并一个接一个地执行查询

在最初的解决方案中,如果你非常不走运,你可能会遇到这种情况——但这种情况会发生:

第一个用户进行选择,得到5作为数量 第二个用户进行选择,得到5作为数量 第一个用户更新到4 第二个用户也更新到4。。。但是,在那里,它应该被更新到3!
你可以用一个更新语句来完成它——“updateitems SET quantity=quantity-1,其中item_id=”$id“谢谢你们,我从来没有遇到过这件事。”
UPDATE items SET quantity = quantity - 1 WHERE item_id = '$id'
UPDATE items SET quantity = quantity + 1 WHERE item_id = '$id'