it-swarm.com.de

Wert in MySQL verringern, aber nicht negativ

Ich möchte einen Wert dekrementieren, wenn der Benutzer ihn in PHP und MySQL löscht. Ich möchte überprüfen, ob der Wert nicht unter 0 liegt. Wenn der Wert 0 ist, dann nicht dekrementieren.

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

Wenn das Feld ist, machen Sie nichts

39
user2244804

Fügen Sie eine weitere Bedingung hinzu, die nur aktualisiert werden soll, wenn field größer ist 0

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

Sie können verhindern, dass der neue Wert unter Null fällt, indem Sie GREATEST() verwenden. Wenn der Wert unter null fällt, ist null immer größer als der berechnete Wert, sodass kein Wert unter null verwendet werden kann.

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

Und als Randnotiz: Bitte benutze nicht mysql_* funktioniert nicht mehr. Sie sind veraltet und werden irgendwann aus PHP entfernt. Verwenden Sie stattdessen PDO oder MySQLi .

34
Till Helge

Die Option mit GREATEST funktioniert in neueren MySQL-Versionen nicht und die akzeptierte Antwort kann unbrauchbar sein, wenn Sie mehrere Felder anstelle von einem aktualisieren möchten. Meine Lösung für dieses Problem ist die Verwendung von 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