Votre problème est que vous ne calculez aucun marktwert
valeur pour les joueurs (Spieler) âgés de plus de 31 ans (geburtstag =anniversaire). Votre instruction UPDATE essaie d'écrire NULL
dans le marktwert
colonne, qui est définie comme NOT NULL
. Et cela se traduit par une erreur.
Solution :
1) Utilisateur ELSE
dans votre CASE
et définissez une valeur par défaut :
UPDATE _spieler SET marktwert = CASE
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 27 THEN ((w_staerke/100*70) + (w_technik/100*30))
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31 THEN ((w_staerke/100*70) + (w_technik/100*30))
ELSE 0
END;
2) Autoriser NULL
valeur pour la colonne marktwert
:
CREATE TABLE `_spieler` (
...
`marktwert` int(10) NULL DEFAULT '0',
...
)
3) Utilisez un WHERE
condition :
UPDATE _spieler SET marktwert = CASE
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 27 THEN ((w_staerke/100*70) + (w_technik/100*30))
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31 THEN ((w_staerke/100*70) + (w_technik/100*30))
END
WHERE TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31;
Mise à jour :Vous pouvez également supprimer le marktwert
colonne et utilisez une vue
(table calculée) à la place :
CREATE VIEW `_spieler_view` AS SELECT s.*,
CASE
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 27 THEN ((w_staerke/100*70) + (w_technik/100*30))
WHEN TIMESTAMPDIFF(YEAR, geburtstag, NOW()) <= 31 THEN ((w_staerke/100*70) + (w_technik/100*30))
END AS marktwert_calculated
from _spieler s ;
Mise à jour 2 :
Si vous utilisez MariaDB, vous pouvez également utiliser Colonnes virtuelles (calculées)