web-dev-qa-db-ja.com

mysqlで値を減らしますが、負ではありません

ユーザーがphpおよびmysqlで値を削除したときに値を減らしたい。 0未満にならないようにチェックしたい。値が0の場合、decrementをしない。

mysql_query("UPDATE table SET field = field - 1 WHERE id = $number");

フィールドがの場合、何もしません

39
user2244804

fieldが大きい場合のみ更新する別の条件を追加0

UPDATE table 
SET field = field - 1
WHERE id = $number
and field > 0
65
juergen d

GREATEST() を使用することにより、新しい値がゼロ以下に落ちるのを防ぐことができます。値がゼロより下に下がると、ゼロは常に計算された値よりも大きくなるため、ゼロより下の値は使用できなくなります。

UPDATE  table
SET     field = GREATEST(0, field - 1)
WHERE   id = $number

補足説明:mysql_*関数は使用しないでください。これらは非推奨であり、最終的にはPHPから削除されます。代わりに [〜#〜] pdo [〜#〜] または MySQLi を使用してください。

34
Till Helge

GREATESTを使用するオプションは、新しいMySQLバージョンでは機能しません。また、1つではなく複数のフィールドを更新する場合、受け入れられた答えは役に立たない可能性があります。この問題の私の解決策はIFを使用しています:

UPDATE  table
SET     field = IF(field > 0, field - 1, 0)
WHERE   id = $number
7
Eelco Luurtsema
UPDATE table SET field = case when (field - 1) >0 then (field - 1)
else field end
WHERE id = $number
2
Niket