Mysql
 sql >> Base de données >  >> RDS >> Mysql

Ajouter 1 à un champ

Je suis rétrogradé pour ça ?

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

Dans le cas spécifique de Teifion, le phpBB DDL répertorie ce champ particulier comme NOT NULL, il n'y a donc aucun danger d'incrémenter NULL.

Dans le cas général, vous ne devez pas utiliser NULL pour représenter zéro. Incrémenter NULL devrait donner une réponse de NULL. Si vous êtes le genre de développeur égaré qui pense que NULL=0, éloignez-vous du clavier et trouvez un autre passe-temps, vous ne faites que rendre la vie difficile pour le reste d'entre nous. Bien sûr, c'est l'industrie informatique et qui sommes-nous pour dire que vous vous trompez ? Si vous ne vous trompez pas, utilisez

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

...mais avouons-le :vous vous trompez. Si tout le monde commence au niveau 0, alors votre DDL devrait inclure

level INT DEFAULT '0' NOT NULL

au cas où les programmeurs oublient de le définir lorsqu'ils créent un enregistrement. Si tout le monde ne commence pas au niveau 0, ignorez le DEFAULT et forcez le programmeur à fournir une valeur à la création. Si certaines personnes sont au-delà des niveaux, pour qui avoir un niveau n'a pas de sens, alors en ajouter un à leur niveau n'a pas non plus de sens. Dans ce cas, supprimez NOT NULL du DDL.