{MySQL} gestion d'un stock avec 2 tables

Fermé
oron32000 Messages postés 2 Date d'inscription dimanche 3 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010 - 3 janv. 2010 à 10:22
oron32000 Messages postés 2 Date d'inscription dimanche 3 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010 - 3 janv. 2010 à 15:16
Bonjour à tous et pour commencer je vous souhaite une bonne et heureuse année 2010

Je débute en base de donnée et donc en sql et j' ai un petit problème que je n'arrive pas à solutionner

je suis sous phpmyadmin, j'ai 1 base de données en sql avec plusieurs tables mais mon problème se pose sur 2 d'entre elles.

une s'appelle "stock" avec comme colonnes : Num_produit_stock ; Nom ; Description ; Prix unitaire vendu et Quantité_stock
et l'autre s'appelle "facture_detail" avec comme colonnes : Num factures détails ; Num facture BDD ; Num_produit_facture ; Quantité_facture

Prenons un exemple. stock m'indique ce que j'ai en stock comme son nom l'indique et que facture détail m'indique combien d'article j'ai de commandé dans la facture.
si j'ai un "stock" : 01 ; ampoule ; ampoule 50Watts ; 6€ ; 200 et que j'ai un client qui me prend une "facture_detail" : 01 ; 01 ; 01 ; 50.
Ce que j'aimerais c'est que la colonnes Quantité_stock = Quantité_stock - Quantite_facture

J'ai déjà une relation entre ces 2 table avec Num produit.

J'ai cherché avant de poster cette demande et j'ai trouvé ça déjà :

voilà le code que j'utilise :
SELECT egdi3_stock.Num_produit_stock, egdi3_stock.Quantite_stock - egdi3_factures_details.Quantite_facture
FROM egdi3.egdi3_stock AS egdi3_stock, egdi3.egdi3_factures_details AS egdi3_factures_details
WHERE egdi3_stock.Num_produit_stock = egdi3_factures_details.Num_produit_facture )

le seul problème c'est qu'il me renvoie un tableau avec le résultat de la soustraction mais il ne met pas à jour ma table stock donc pour chaque opération, il reprend le stock au début.

exemple : j'ai un stock d'ampoules de 200.
si j'ai 2 factures, une de 50 et une autre de 100, ce que j'aimerais c'est qu'après mon stock ne soit plus que de 50. hors avec ce code, j'ai un tableau qui me donne en 2 lignes, une à 150 et l'autre à 100.

J'espère avoir été clair, si vous voulez des compléments d'information n'hésitez pas.

merci d'avance
A voir également:

2 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 janv. 2010 à 13:16
Bonjour,

Alors, déjà, un problème de conception.
Imagine que cela fonctionne ; ta table de stocks sera mise à jour. Très bien. Oui, mais si tu reçois de nouvelles factures, tu vas devoir relancer ta requête, non ? Et dans ce cas, les factures qui ont déjà été prises en compte le seront à nouveau ! Résultat, tes stocks seront ponctionnés plusieurs fois, et ne voudront plus rien dire.

Donc, je te propose de rajouter une colonne dans ta table de factures, qui indique si la facture a déjà été prise en compte ou non.

Ensuite, venons-en au problème lui même : tu utilises des requêtes SELECT : celles-ci sont en lecture seule (la plupart du temps), il est donc normal qu'elles ne modifient pas la table.
Il te faut utiliser UPDATE pour mettre à jour.
Je n'ai pas fait de mysql depuis très longtemps, mais cela doit donner quelque chose comme ça, à adapter au besoin :


UPDATE egdi3.egdi3_stock AS egdi3_stock, egdi3.egdi3_factures_details AS egdi3_factures_details SET
egdi3_stock.Quantite_stock = egdi3_stock.Quantite_stock - egdi3_factures_details.Quantite_facture,
egdi3_factures_details.Facture_PriseEnCompte = 1
WHERE egdi3_stock.Num_produit_stock = egdi3_factures_details.Num_produit_facture AND egdi3_factures_details.Facture_PriseEnCompte = 0

Voilà !

Xavier
1
oron32000 Messages postés 2 Date d'inscription dimanche 3 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010
3 janv. 2010 à 15:16
Merci beaucoup de ta réponse, elle fonctionne presque

Alors, déjà, un problème de conception.
Imagine que cela fonctionne ; ta table de stocks sera mise à jour. Très bien. Oui, mais si tu reçois de nouvelles factures, tu vas devoir relancer ta requête, non ? Et dans ce cas, les factures qui ont déjà été prises en compte le seront à nouveau ! Résultat, tes stocks seront ponctionnés plusieurs fois, et ne voudront plus rien dire.

Donc, je te propose de rajouter une colonne dans ta table de factures, qui indique si la facture a déjà été prise en compte ou non.</gras>

tu as tout à fait raison, je ne rencontrait pas ce problème parce que je ne faisais le test que pour une facture pour l'instant mais à terme je l'aurais rencontré. J'ai donc rajouté une colonne Enregistre dans ma table facture

Ensuite, venons-en au problème lui même : tu utilises des requêtes SELECT : celles-ci sont en lecture seule (la plupart du temps), il est donc normal qu'elles ne modifient pas la table.
Il te faut utiliser UPDATE pour mettre à jour.
Je n'ai pas fait de mysql depuis très longtemps, mais cela doit donner quelque chose comme ça, à adapter au besoin :


UPDATE egdi3.egdi3_stock AS egdi3_stock, egdi3.egdi3_factures_details AS egdi3_factures_details SET
egdi3_stock.Quantite_stock = egdi3_stock.Quantite_stock - egdi3_factures_details.Quantite_facture,
egdi3_factures_details.Facture_PriseEnCompte = 1
WHERE egdi3_stock.Num_produit_stock = egdi3_factures_details.Num_produit_facture AND egdi3_factures_details.Facture_PriseEnCompte = 0



je viens d'essayer ton code, il fonctionne presque nikel, par contre il ne me soustrait que ma première ligne de mes non enregistre. si j'enregistre plusieurs facture et que je ne lance cette requête qu'au bout par exemple de la 3 ème seul la première sera déduit mais dans ma table facture, toutes seront marqué enregistrées

Merci d'avance
0