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)