2016-02-29 43 views
1

如何递减float值但确保其最小值为零?没有额外的查询。递减浮点数,但确保最小为零而不是负数

$query = "UPDATE accounts SET credits = credits - 1 WHERE id = ? LIMIT 1"; 
if ($statement = $mysqli->prepare($query)) 
{ 
    $statement->bind_param("i", $id); 
    $statement->execute(); 
    $statement->close(); 
} 

我看到一个整数值的例子,但不是浮动。

要清除0.23的值,它将变为零。

+0

你看到整数的例子,为什么它不能用浮点数? – shmosel

+0

他们设置了一个条件,如“where credits> = 1” –

+0

您为什么认为这在这里不起作用?另外,是否可以有多个匹配的行?如果不是,有什么限制? – shmosel

回答

4

使用GREATEST功能的最低限制到零:

$query = "UPDATE accounts SET credits = GREATEST(credits - 1, 0) WHERE id = ? LIMIT 1"; 

这样递减到负值将永远不会发生。

+0

这看起来真棒,我不知道有一个更新的最大功能:)) –

+1

@AmyNeville当然!大多数在'select'中工作的函数也可以在'update','insert'和'delete'中使用,尽管人们往往会在'select'查询中使用它们。 – dasblinkenlight

-1

这也适用于浮动。无法找到它为什么不能在你身边工作的原因。

UPDATE accounts 
SET credits = credits - 1 
WHERE id = $number 
and credits > 0