|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Inscription : juillet 2004 Messages : 277 ![]() |
J'ai 2 tables, l'une contient des quantité par stock, l'autre doit contenir la somme des quantités des stocks.
En fait, dans un cas, j'ai : products, stock, quantité dans l'autre table, j'ai : products, quantitéTotale Dans le premier cas, on à une quantité par stock, dans le second, c'est la somme des quantités par stock. quantitéTotale = somme(quantité). Je voudrais automatiser le calcul avec des triggers. Cependant, je ne connais pas bien cette techno et j'ai beaucoup de mal à comprendre le fonctionnement, malgrès quelques explications sur developpez.com et autres. J'ai essayé un code comme ça : Code :
Suis-je dans la bonne direction ou ai-je vraiment tout faux? Pouvez-vous m'aider au moins a démarrer. J'essaye de mettre dans total la somme de mes quantités qui sont dans stock_warehouse, puis de faire un UPDATE sur ma nouvelle table en mettant bien la quantité mise à jour. Je suis un peu perdu avec ces triggers... Merci!
__________________
Хајде Јано коло да играмо |
||
|
|
00
|
|
|
#2 | ||
![]() Inscription : juillet 2002 Messages : 537 ![]() |
Salut,
Je pense que c'est un très bon début. Ici tes totaux de stock seront mis à jour automatiquement quand il y a une mise à jour dans la table. Et je suppose que tu aimerais que ça le soit aussi après une insertion et une suppression. Il te faudra donc deux autres triggers. Quant au calcul du nouveau total dans le cas d'un UPDATE, il y a plus simple selon moi : Code :
UPDATE `products_stock` SET `products_stock_quantity` = `products_stock_quantity` - OLD.products_stock_quantity + NEW.products_stock_quantity WHERE `products_stock_id` = NEW.products_stock_id ; La syntaxe me semble correct pour MySQL, tu as sûrement eu un problème de delimiteur. Code :
|
||
|
|
00
|
|
|
#3 | ||
|
Membre actif
![]() Inscription : juillet 2004 Messages : 277 ![]() |
Super, j'ai fait ça :
Code :
Par contre, il est vrai que j'aurais préféré qu'il y ait un select avec un sum afin d'être certain d'avoir le bon résultat, même si c'est plus long. En effet, dans le cas présent, si la quantité de la table products_stock est mise à jour directement et qu'il y a une erreur, on gardera toujours cette erreur quand on fera des UPDATE dans stock_warehouse. Sinon, mon problème venait aussi du fait que j'essayais d'écrire mes trigger dans phpMyAdmin et que cela ne fonctionne pas. Il faut le faire directement en ligne de commande. Merci beaucoup en tous cas!
__________________
Хајде Јано коло да играмо |
||
|
|
00
|
|
|
#4 | ||
|
Membre actif
![]() Inscription : juillet 2004 Messages : 277 ![]() |
J'ai fait ça direct dans MySQL :
Code :
Bon, je m'empresse de faire les version pour DELETE et INSERT. Pour le INSERT, que deviennent les valeurs OLD.champ ? Et pour le DELETE, que devient NEW.champ?
__________________
Хајде Јано коло да играмо |
||
|
|
00
|
|
|
#5 | ||
|
Membre actif
![]() Inscription : juillet 2004 Messages : 277 ![]() |
J'ai fait ça finalement :
Code :
__________________
Хајде Јано коло да играмо |
||
|
|
00
|
|
|
#6 | ||
![]() Inscription : juillet 2002 Messages : 537 ![]() |
Citation:
Citation:
Si tu veux garder absolument ton select pour calculer le total, tu peux faire une fonction (create function) qui prend en paramètre l'identifiant du stock et qui retourne le total de ce stock. Ca sera un peu plus propre, et aussi une occasion d'essayer les fonctions si tu ne l'as jamais fait. |
||
|
|
00
|
|
|
#7 |
|
Membre actif
![]() Inscription : juillet 2004 Messages : 277 ![]() |
Ok, merci beaucoup.
Il faudra que je teste les fonctions en effet. Sinon, j'aimerais en savoir un peu plus sur les triggers, et plus particulièrement ou ils sont stockés dans MySQL. C'est juste à titre informatif. C'est utile de savoir ça si je veux exporter ma base de données.
__________________
Хајде Јано коло да играмо |
|
|
00
|
|
|
#8 |
![]() Inscription : juillet 2002 Messages : 537 ![]() |
Salut,
Les triggers sont associés aux tables qu'ils concernent, contrairement aux procédures et fonctions qui sont associées à une base. Cependant, je ne sais pas te dire où ils sont stockés. Pour la sauvegarde, le programme mysqldump permet également de dumper les triggers avec l'option --triggers. |
|
|
00
|
|
|
#9 |
|
Membre actif
![]() Inscription : juillet 2004 Messages : 277 ![]() |
Super merci!
J'ai tout ce qu'il me faut!
__________________
Хајде Јано коло да играмо |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com