[SQL]difficulté de création de requete

Fermé
MuronY Messages postés 47 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 27 août 2008 - 19 juin 2008 à 09:16
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 - 19 juin 2008 à 11:00
Bonjour a tous,
Après des problème de tous type sur certain langage voila que mon mysql et mon sql s'y mettent aussi
Donc voila mon première question :
La table :
-- 
-- Structure de la table `consommable`
-- 
 
CREATE TABLE `consommable` (
  `numcon` int(11) NOT NULL DEFAULT '0',
  `refcon` text NOT NULL,
  `markimp` text NOT NULL,
  `modimp` text NOT NULL,
  `typcon` text NOT NULL,
  `coulcon` text NOT NULL,
  `stomin` int(11) NOT NULL DEFAULT '0',
  `stoact` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`numcon`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;



La requête :
SELECT markimp FROM consommable;


qui me donne un résultat comme sa :
HP
Epson
Lexmark
HP
Lexmark
Epson
Epson
HP

Normal ? il ne devrait pas y avoir de redondance ?



Ensuite c'est un problème de création de requête :s

Les tables :
-- 
-- Structure de la table `commande`
-- 
 
CREATE TABLE `commande` (
  `numcomm` int(11) NOT NULL DEFAULT '0',
  `datcomm` date NOT NULL DEFAULT '0000-00-00',
  `qtecomm` int(11) NOT NULL DEFAULT '0',
  `numcon` int(11) NOT NULL DEFAULT '0',
  `numfou` int(2) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`numcomm`,`numcon`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
 
-- 
-- Structure de la table `prix`
-- 
 
CREATE TABLE `prix` (
  `numcon` int(11) NOT NULL DEFAULT '0',
  `prixcon` double NOT NULL DEFAULT '0',
  `numfou` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Explication :
On voit que nous avons la table commande et prix donc je souhaite simplement calculer le total de chaque commande alors pour moi la requete juste serai :
SELECT SUM(prix.prixcon*commande.qtecomm) AS TT FROM prix, commande WHERE prix.numcon=commande.numcon AND prix.numfou=commande.numfou AND numfou='$numfou' AND numcomm='$numcomm';


Mais sa me donne :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\Program Files\EasyPHP1-8\www\Consommable\com\commande2.php on line 123

voila merci d'avance :)
A voir également:

4 réponses

Est-ce que tu à crée tes clés étrangères ?

Sinon la première question j'ai pas tout capté...
J'ai cru comprendre que tu ne voulais pas de doublons, dans ce cas utilise DISTINCT.
0
NebJ Messages postés 19 Date d'inscription mercredi 18 juin 2008 Statut Membre Dernière intervention 22 juin 2008 4
19 juin 2008 à 09:30
Bonjour,

Pour ta première question, c'est: SELECT DISTINCT markimp FROM consommable;

Pour ta dexième question, tu dois apprendre à crée des jointures. Ca devrais donner quelque chose du genre: SELECT SUM(prix.prixcon*commande.qtecomm) AS TT FROM prix JOIN commande ON (prix.numcon=commande.numcon AND prix.numfou=commande.numfou AND numfou='$numfou' AND numcomm='$numcomm');
0
MuronY Messages postés 47 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 27 août 2008 1
19 juin 2008 à 09:36
Le distinct est un bonne idée, il marche niquel et évite donc les redondances :)
Par contre en ce qui concerne la requête on ma toujours appris que les jointure se fesait dans le WHERE
d'une part c'est beaucoup plus simple puis bon accessoirement sa fonctionne ^^
Mais la requête proposé ne marche pas non plus : s
0
Je l'ai dis dans mon premier post...

Si tu n'a pas crée tes clés étrangères, ça ne sert à rien d'essayer de faire des jointures. :s

Créer tes tables comme cela :

CREATE TABLE `commande` (
`numcomm` int(11) NOT NULL DEFAULT '0',
`datcomm` date NOT NULL DEFAULT '0000-00-00',
`qtecomm` int(11) NOT NULL DEFAULT '0',
`numcon` int(11) NOT NULL DEFAULT '0',
`numfou` int(2) NOT NULL DEFAULT '0',
PRIMARY KEY (`numcomm`,`numcon`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


--
-- Structure de la table `prix`
--

CREATE TABLE `prix` (
`numcon` int(11) NOT NULL DEFAULT '0',
`prixcon` double NOT NULL DEFAULT '0',
`numfou` int(11) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

ALTER TABLE prix
ADD CONSTRAINT FK_numcon
FOREIGN KEY ( numcon ) REFERENCES commande( numcon );


ALTER TABLE prix
ADD CONSTRAINT FK_numfou
FOREIGN KEY ( numfou ) REFERENCES commande( numfou );

De plus, numfou de prix c'est int(11) et numfou de commande c'est int(2).
0
MuronY Messages postés 47 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 27 août 2008 1
19 juin 2008 à 10:11
alors tous le monde est passé en int(2) et j'ai référence les clef étrangère grâce a ton code mais cela ne donne toujours rien : s
en tout cas merci quand même maintenant les clef sont bien liées.
Peut être que l'erreur vient des la requête non ?
pour info j'ai vérifier les variable elle sont bonne ^^
0
MuronY Messages postés 47 Date d'inscription vendredi 18 mai 2007 Statut Membre Dernière intervention 27 août 2008 1
19 juin 2008 à 10:38
trouver ! un problème de champ ambigu : numfou='$numfou' était ambigu mais commande.numfou='$numfou' fonctionne parfaitement :)
Voila merci a tous pour vos réponse et votre implication :)
0
kazouu Messages postés 466 Date d'inscription mercredi 4 juin 2008 Statut Membre Dernière intervention 24 juillet 2008 12
19 juin 2008 à 11:00
dans ta requete met

SELECT SUM(prix.prixcon*commande.qtecomm) AS TT FROM prix JOINcommande WHERE prix.numcon=commande.numcon AND prix.numfou=commande.numfou AND numfou='$numfou' AND numcomm='$numcomm';
0