Réadapter ma requête sql [Résolu]

- - Dernière réponse : msi79
Messages postés
487
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
27 mai 2019
- 24 janv. 2016 à 15:33
Bonjour tout le monde et mes meilleurs vœux à tous,
jordane45 m'avais aider a avoir une requête qui me permet de gérer mes stocks. Mais il se trouve que la requête affiche le stock que lorsque l'article est vendu or mais je qu'elle affiche même si rien n'est vendu.
merci de bien vouloir m'aider .
voici la requête sql :
$sql = "SELECT DISTINCT S.id_pros
		 ,ART.*	    
		 ,SUM(S.qte) AS arrive
		 ,SUM(S.qte) - (ART.vendu) AS diff
       FROM  stocks S 
		,(SELECT 
		 A.articleVendu,
		 A.id_prod
		,SUM(A.articleQuant) as vendu 
		FROM  articles A 
		GROUP BY A.id_prod) ART
		WHERE(ART.id_prod = S.id_pros)
		GROUP BY S.id_pros
				";	
Afficher la suite 

9 réponses

Messages postés
25819
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2019
312
0
Merci
Bonjour,

Que donne ceci :
SELECT DISTINCT S.*
               ,ART.*	    
               ,SUM(S.qte) AS arrive
               ,SUM(S.qte) - (ART.vendu) AS diff
FROM  stocks S 
LEFT JOIN (
       SELECT 
		      A.articleVendu,
		      A.id_prod
		      ,SUM(A.articleQuant) as vendu 
		   FROM  articles A 
		  GROUP BY A.id_prod) ART ON ART.id_prod = S.id_pros
GROUP BY S.id_pros


Si ça ne fonctionne pas, peux tu nous fournir
- La structure de tes tables ( via un SHOW CREATE par exemple)
- Quelques lignes d'exemples
- Un exemple de ce que tu "devrais" obtenir.


Commenter la réponse de jordane45
Messages postés
487
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
27 mai 2019
0
Merci
merci de bien vouloir e repondre J45


1. voici la structure de mes 2 tables :



CREATE TABLE IF NOT EXISTS `produits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`article` varchar(150) DEFAULT NULL,
`taille` int(11) NOT NULL,
`pa` int(15) NOT NULL,
`pv` int(15) NOT NULL,
`ref` varchar(30) NOT NULL,
`prixmin` int(11) NOT NULL,
`prixmax` int(11) NOT NULL,
`id_rayon` int(11) NOT NULL,
`date` varchar(30) NOT NULL,
`id_pros` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;


Commenter la réponse de msi79
Messages postés
25819
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2019
312
0
Merci
- Tes deux tables ... ne sont pas les mêmes que celles de ta précédente requête.... est-ce normal ?

- Par rapport aux colonnes des deux tables dont tu nous donnes la structure.... quelles sont les colonnes à afficher ? ( et si des calculs sont à faire.... lesquels ?? )

- A quoi correspondent tes colonnes accuse_stock et accuse_stock2 ?


Commenter la réponse de jordane45
Messages postés
487
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
27 mai 2019
0
Merci
oui c vrai voici les 2tables :


CREATE TABLE IF NOT EXISTS `articles` (
`id_art` int(11) NOT NULL AUTO_INCREMENT,
`dateArt` datetime NOT NULL,
`num` int(15) NOT NULL,
`Designation` varchar(150) NOT NULL,
`articleVendu` varchar(50) NOT NULL,
`taille` varchar(11) NOT NULL,
`articleRef` varchar(15) NOT NULL,
`articleQuant` varchar(50) NOT NULL,
`articlePU` varchar(50) NOT NULL,
`pa` int(11) NOT NULL,
`marge` int(10) NOT NULL,
`id` int(11) NOT NULL,
`id_prod` int(11) NOT NULL,
`remise` varchar(11) NOT NULL,
`id_com` int(11) NOT NULL,
`taux` varchar(15) NOT NULL,
`espece` enum('0','1') NOT NULL,
`cheque` enum('0','1') NOT NULL,
`cheque_status` enum('1','2') NOT NULL,
`cheque_enc` enum('3','4') NOT NULL,
`cheque_rej` enum('4','5') NOT NULL,
`credit` enum('0','1') NOT NULL,
`id_cl` int(11) NOT NULL,
`clef` varchar(11) NOT NULL,
`session` varchar(150) NOT NULL,
PRIMARY KEY (`id_art`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;


-- Structure de la table `stocks`
--

CREATE TABLE IF NOT EXISTS `stocks` (
`num` int(11) NOT NULL,
`taille` varchar(11) NOT NULL,
`date` varchar(30) NOT NULL,
`qte` int(11) NOT NULL,
`unite` varchar(30) NOT NULL,
`id_get` int(11) NOT NULL,
`id_pros` int(11) NOT NULL,
`accuse_stock` enum('0','1') NOT NULL,
`accuse_stock2` enum('1','2') NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


accuse_stock et accuse_stock2 ne vous occupez pes de ces 2 tables . ils servent seulement a faire des confirmations par d'autre personnes pour le controle des stocks
jordane45
Messages postés
25819
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2019
312 -
Tu n'as pas répondu à toutes mes questions...

Ni même fourni, en plus de la structure de tes tables, un exemples de données à y insérer....
Commenter la réponse de msi79
Messages postés
487
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
27 mai 2019
0
Merci
voici les 2tables et les contenues :
jordane45
Messages postés
25819
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 juin 2019
312 -
Tu as toujours autant de mal à comprendre / lire ce qu'on t'écrit visiblement......
Je t'ai dit dans mon précédent message :

Tu n'as pas répondu à toutes mes questions...

Donc... j’attends.....
Commenter la réponse de msi79
Messages postés
487
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
27 mai 2019
0
Merci
- Par rapport aux colonnes des deux tables dont tu nous donnes la structure.... quelles sont les colonnes à afficher ? ( et si des calculs sont à faire.... lesquels ?? )

plutôt des calculs a afficher :
je veux afficher les stocks des articles entrés . quelque chose du genre :
SUM(S.qte) - (ART.vendu) AS diff
comme tu l'avais fais mais il se trouve que ça n'affiche que quand l'aricle est vendu or vendrais qu'il affiche meme s'il n'y a pas s'achat.



je sais pas si on se comprend
Commenter la réponse de msi79
0
Merci
Bjr jordane45 , Tu m'as jamais laissé tomber s'il te plait aide moi
Commenter la réponse de msi79
Messages postés
487
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
27 mai 2019
0
Merci
BONJOUR JORDANE45,
avec cette requête que tu as donnée , je suis pas loin de la réponse. il n'affiche pas la désignation tant qu'il n y a pas d'achat
SELECT DISTINCT S.*
               ,ART.*	    
               ,SUM(S.qte) AS arrive
               ,SUM(S.qte) - (ART.vendu) AS diff
FROM  stocks S 
LEFT JOIN (
       SELECT 
		      A.articleVendu,
		      A.id_prod
		      ,SUM(A.articleQuant) as vendu 
		   FROM  articles A 
		  GROUP BY A.id_prod) ART ON ART.id_prod = S.id_pros
GROUP BY S.id_pros



voici ce que ca donne par exemple quand je rentre en stock 2 articles et qu'on ne vend aucun d'eux:


on voit bien la que la colonne designation retourne rien.




par contre si je vends par exemple chmz/14
voici ce due ça donne :


on voit que chmz/14 est renseigné vus qu'une qu'on en a vendu 1.



comment modifier ta requète pour regler ce probleme . faire en sorte d'afficher la designation qu'on ait vendu ou non
Commenter la réponse de msi79
Messages postés
487
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
27 mai 2019
0
Merci
je ne suis pas resté sans rien faire j'ai introduit une autre table dans ma requête que j'ai donc modifiée et la colonne DESIGNATION est désormais renseignée mais je suis confronté a un autre problème :
SUM(S.qte) AS arrive
renvoie 900 au lieu de 300.

voici ma requète :
SELECT DISTINCT S.*
               ,ART.*	    
               ,SUM(S.qte) AS arrive
               ,SUM(S.qte) - (ART.vendu) AS diff
			   ,S.id_pros
			   ,P.id_pros
			   ,P.article

FROM  stocks S 
LEFT JOIN (
       SELECT 
		      A.articleVendu,
		      A.id_prod
		      ,SUM(A.articleQuant) as vendu 
		   FROM  articles A 
		  GROUP BY A.id_prod) ART ON ART.id_prod = S.id_pros 
JOIN produits P ON S.id_pros = P.id_pros
GROUP BY S.id_pros
msi79
Messages postés
487
Date d'inscription
lundi 24 août 2009
Statut
Membre
Dernière intervention
27 mai 2019
-
merci Jordan45 la requête est bonne grâce a toi une fois de plus mon problème est réglé . tu m'as mis sur la voie . Que 2016 soit pour toi une année de santé, de prospérité et assez d'argent.
SELECT DISTINCT S.*
               ,ART.*	    
               ,SUM(S.qte) AS arrive
               ,SUM(S.qte) - (ART.vendu) AS diff
			   ,S.id_pros
			   ,P.id_pros
			   ,P.article

FROM  stocks S 
LEFT JOIN (
       SELECT 
		      A.articleVendu,
		      A.id_prod
		      ,SUM(A.articleQuant) as vendu 
		   FROM  articles A 
		  GROUP BY A.id_prod) ART ON ART.id_prod = S.id_pros 
JOIN produits P ON S.id_pros = P.id_pros
GROUP BY S.id_pros
Commenter la réponse de msi79