Ajouter un nombre à une colonne null [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 07-10-2019 à 17:02:31
Ça doit pouvoir se gérer avec un CASE :
https://dev.mysql.com/doc/refman/5.7/en/case.html
Marsh Posté le 07-10-2019 à 17:11:35
Alors, je cherche depuis je ne sais combien de temps et il suffit que je poste la demande pour avoir quelque chose qui m'a l'air de fonctionner…
Code :
|
Code :
|
Je ne passe pas par un CASE comme tu le proposes mais je suppose que ça doit marcher pareil au final.
Bref, je dois faire 2-3 tests pour être certain que c'est bon, et si vous passez par là, vous pourrez me dire si c'est bon ou pas ma méthode.
Merci!
Marsh Posté le 08-10-2019 à 21:56:03
Il y a la fonction IFNULL() qui devrait faire le job : IFNULL(val1, val2) renvoie val1 si non null, val2 sinon.
Donc l'addition va s'écrire :
op.hoursMax = IFNULL(op.hoursMax, 0) + NEW.hours
Marsh Posté le 09-10-2019 à 11:56:05
+1 pour la fonction IFNULL plus appropriée qu'un trigger ou un case à mon avis.
Marsh Posté le 09-10-2019 à 15:15:23
Le case, c'est bien quand t'as plus que 2 cas (IF/ELSE).
Marsh Posté le 14-10-2019 à 18:58:39
Je ne connaissais pas non plus ce IFNULL, merci beaucoup!
Marsh Posté le 07-10-2019 à 17:00:05
Bonjour,
J'ai une table "OP" proposant en résumé comme champs:
- Id
- Nom
- hoursMax, qui par défaut est null
J'ai une autre table de bons de commande "OP_BC":
- Id
- op_id -> ID de l'OP auquel il est lié
- hours
Lorsque je crée ou que je modifie un enregistrement de "OP_BC", je souhaiterais que le "heureMax" de OP se mette à jour en fonction.
Je crée un enregistrement dans OP_BC de 100h, je souhaites que heuresMax de l'OP correspondant prenne 100h de plus.
J'ai pour ça fait des triggers:
Seul problème, c'est que le nombre d'heures est modifié uniquement si la valeur de "hoursMax" n'est pas égale à null. Si elle est à null alors rien n'est fait.
J'ai testé la requête en direct et ça m'a confirmé la chose: null+100 = null
Mettre hoursMax à 0 par défaut résout le problème mais avoir null m'arrange plus pour l'affichage ensuite, ça me fait une condition de moins à mettre s'il n'y a pas d'heures max renseignées. Sachant qu'en plus mettre la valeur "0" veut dire "0 heures max" et pas "pas d'heure renseignée".
Bref, comment puis-je résoudre ce problème?
Par avance merci!