Die folgende scheint Chancen zu mir:ON DUPLICATE KEY UPDATE - Dekrementwert in MySQL
INSERT INTO sometable (UNIQUEVALUE,NUMERICVALUE) VALUES ('valuethatexists','100') ON DUPLICATE KEY UPDATE NUMERICVALUE = NUMERICVALUE+VALUES(NUMERICVALUE);
Angenommen Ihr NUMERICVALUE
ist bei 0.
Die oben auf 100 ändern würde - was funktioniert.
Wenn Sie dann jedoch -100 eingeben, funktioniert es nicht richtig.
INSERT INTO sometable (UNIQUEVALUE,NUMERICVALUE) VALUES ('valuethatexists','-100') ON DUPLICATE KEY UPDATE NUMERICVALUE = NUMERICVALUE+VALUES(NUMERICVALUE);
Die obige Aussage sollte es auf 0 zurückgeben. In meinem Fall nicht. Es bleibt bei 100.
Fehle ich etwas?
Edit: Das geht woanders schief. Ich mache das mit PHP. Der eigentliche Code mit diesem Fehler sieht folgendermaßen aus:
Edit 2: Dies hatte auch nichts mit PHP zu tun. Das Problem war, dass der NUMERIC-Wert in meiner Produktionsumgebung UNSIGNED war, was bedeutet, dass VALUES (NUMERICVALUE) vor der Verwendung von -100 auf 0 gebracht wurde.
Ich habe gerade versucht SQLFiddel und meine eigene 5.7 DB. Sie haben Recht - es hat wie erwartet getan. Ich mache das mit PHP und das geht natürlich woanders schief. Ich werde versuchen, weiter zu untersuchen. – nickdnk
Gut, versuchen Sie einfach, das Problem Schritt für Schritt zu isolieren :) – Benjamin
Siehe aktualisierte Antwort mit PHP-Beispiel. – nickdnk