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

msi79 - 19 janv. 2016 à 17:57 - Dernière réponse : msi79 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention
- 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 

12 réponses

Répondre au sujet
jordane45 20601 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 19 janv. 2016 à 19:57
0
Utile
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
msi79 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention - 19 janv. 2016 à 20:23
0
Utile
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
jordane45 20601 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 20 janv. 2016 à 09:17
0
Utile
- 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
msi79 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention - 20 janv. 2016 à 10:01
0
Utile
1
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 20601 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 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....
Commenter la réponse de msi79
msi79 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention - 20 janv. 2016 à 18:02
0
Utile
1
voici les 2tables et les contenues :
jordane45 20601 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 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.....
Commenter la réponse de msi79
msi79 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention - 20 janv. 2016 à 18:52
0
Utile
- 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
Utile
Bjr jordane45 , Tu m'as jamais laissé tomber s'il te plait aide moi
Commenter la réponse de msi79
msi79 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention - 24 janv. 2016 à 13:11
0
Utile
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
msi79 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention - 24 janv. 2016 à 14:00
0
Utile
1
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 409 Messages postés lundi 24 août 2009Date d'inscription 5 avril 2018 Dernière intervention - 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
Commenter la réponse de msi79

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.