如果值> gt = = 1,则减少数据库表值...删除记录

时间:2013-05-28 22:10:05

标签: php sql delete-row

如果字段值大于或等于1(>= 1),我想减少数据库表值。否则(如果它小于1)那么我想删除整个数据库记录,我的代码连续递减值,但是当它达到小于1时不删除记录。

我认为$Check变量不包含Quantity字段值,但我不确定:

使用MySQL

这是我的代码:

$Check = "SELECT Quantity FROM Cart WHERE ItemCode = '1'";

if($Check >= '1')
{
    $Query = "UPDATE Cart SET Quantity = Quantity - 1 WHERE ItemCode = '1'";
    mysql_query($Query);
}
else
{
    $DeleteRow = "DELETE FROM Cart WHERE ItemCode = '1'";   
    mysql_query($DeleteRow);
}

mysql_close();

2 个答案:

答案 0 :(得分:0)

试试这段代码:

<?php

    $Check = "SELECT Quantity FROM Cart WHERE ItemCode = '1'";
    $result = mysql_query($Check);

    $row = mysql_fetch_assoc($result);
    if($row['Quantity'] >= '1'){
    $Query = "UPDATE Cart SET Quantity = ".$row['Quantity']." - 1 WHERE ItemCode = '1'";

    mysql_query($Query);

    }
    else
    {
    $DeleteRow = "DELETE FROM Cart WHERE ItemCode = '1'";
    mysql_query($DeleteRow);
    }

    mysql_close();

&GT;

如果你的代码运行正常,请尝试在程序方式上将其调整为mysqli扩展;不推荐使用mysql扩展名。

不推荐使用mysql扩展;您应该尝试使用mysqli或PDO,请点击此链接并做出选择:http://www.phptherightway.com/#databases

答案 1 :(得分:0)

您实际上从未运行查询以获取记录计数,您只需将查询字符串本身存储到$Count变量中。这就是为什么它不断减少计数。

您可以运行查询然后提取数量列(运行查询的返回值是结果集,您仍然需要提取列值)但是也有问题,特别是数据可能会在检查和更新/删除(称为竞争条件)。

从数据库的角度来看,最好的办法是启动事务以确保整个事务是原子的。在交易中,您将拥有:

update cart set quantity = quantity - 1 where itemcode = '1'
delete from cart where quantity < 1 and itemcode = '1'

这可确保操作完全符合您的需要而不会出现竞争条件。