Réadapter ma requête sql

Résolu
msi79 - 19 janv. 2016 à 17:57
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 - 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
				";	

9 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
19 janv. 2016 à 19:57
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.


0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
19 janv. 2016 à 20:23
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 ;


0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
20 janv. 2016 à 09:17
- 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 ?


0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
20 janv. 2016 à 10:01
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
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
20 janv. 2016 à 14:01
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....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
20 janv. 2016 à 18:02
voici les 2tables et les contenues :
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 344
20 janv. 2016 à 18:40
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.....
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
20 janv. 2016 à 18:52
- 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
0
Bjr jordane45 , Tu m'as jamais laissé tomber s'il te plait aide moi
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
24 janv. 2016 à 13:11
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
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
24 janv. 2016 à 14:00
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
0
msi79 Messages postés 509 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 2 mai 2023 1
24 janv. 2016 à 15:33
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
0
Rejoignez-nous