Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Addiere 1 zu einem Feld

Ich werde dafür heruntergemoddet?

$sql = "UPDATE skills SET level = level+1 WHERE id = $id";
$result = $db->sql_query($sql);
$db->sql_freeresult($result);

In Teifions speziellem Fall listet die phpBB-DDL dieses bestimmte Feld als NOT NULL auf, sodass keine Gefahr besteht, NULL zu erhöhen.

Im Allgemeinen sollten Sie NULL nicht verwenden, um Null darzustellen. Inkrementieren von NULL sollte eine Antwort von NULL geben. Wenn Sie zu den fehlgeleiteten Entwicklern gehören, die denken, NULL=0, weg von der Tastatur und sich einen anderen Zeitvertreib suchen, machen Sie uns anderen nur das Leben schwer. Natürlich ist dies die Computerindustrie und wer sind wir, um zu sagen, dass Sie falsch liegen? Wenn Sie nicht falsch liegen, verwenden Sie

$sql = "UPDATE skills SET level = COALESCE(level,0)+1 WHERE id = $id";

...aber seien wir ehrlich:Sie liegen falsch. Wenn alle auf Level 0 beginnen, sollte Ihre DDL enthalten

level INT DEFAULT '0' NOT NULL

für den Fall, dass die Programmierer vergessen, es festzulegen, wenn sie einen Datensatz erstellen. Wenn nicht alle auf Ebene 0 beginnen, überspringen Sie den DEFAULT und zwingen den Programmierer, bei der Erstellung einen Wert anzugeben. Wenn einige Menschen jenseits von Ebenen sind, für die es bedeutungslos ist, eine Ebene zu haben, dann hat das Hinzufügen einer Ebene zu ihrer Ebene ebenfalls keine Bedeutung. Löschen Sie in diesem Fall NOT NULL aus der DDL.