Bon voilà j’ai une table pour mes articles endommagés, avec une clef pour le lieu des dégats et une pour la nature des dégats. (et naturellement deux tables qui donnent un nom pour chaque ID, simple quoi). Là partie difficile c’est que la date est stokée dans un table ‘lot’… un lot = X articles.
Alors ce que je voudrais faire c’est : compter pour une période donnée le nombre d’articles qui ont eu une avarie en un lieu donné… le but c’est de faire un graphique de tout ca
SQL
[color=blue;font-weight:bold]SELECT[/color] natures.Nature, COUNT(chassis) FROM `vehicules`,`natures` WHERE vehicules.lieu = '$lieu' AND natures.idNature = vehicules.Nature GROUP BY natures.Nature
Ca me donne :
climatique : 28
vol : 66
Ca marche !! Mais =>
Seulement je ne sais pas comment m’en sortir avec la date en fait
J’ai tenté de faire le pont entre les vehicules (qui stockent l’id du lot auquel ils appartiennent) et la date du lot, mais bon ca marche pas… et les join je sais pas faire
SQL
[color=blue;font-weight:bold]SELECT[/color] natures.Nature, COUNT( vehicules.chassis ) , lieux.Lieu
FROM vehicules, natures, lots, lieux
WHERE vehicules.Lieu = 1 AND natures.idNature = vehicules.Nature AND vehicules.idLot = lots.idLot AND lots.dateLot
BETWEEN ‘2005-1-1’ AND ‘2005-11-31’
GROUP BY natures.Nature
Il me semble qu’il faudrait mieux faire deux requetes SQL (je peux me tromper, je suis assez débutant mais bon), la première prends donc ta première partie, la deuxième fait une selection par date.
SQL
[color=blue;font-weight:bold]SELECT[/color] natures.Nature, COUNT( vehicules.chassis ) , lieux.Lieu
FROM vehicules, natures, lots, lieux
WHERE vehicules.Lieu = 1 AND natures.idNature = vehicules.Nature AND vehicules.idLot = lots.idLot AND lots.dateLot
BETWEEN ‘2005-1-1’ AND ‘2005-11-31’
GROUP BY natures.Nature
[/quote]
Tu n’es pas obligé d’utiliser un join pour faire un jointure, les égalités sur tes id (idnature, idLot) font ta jointure, seuelement, tu n’as pas fait de jointure sur les Lieux (qqch = idLieux)
edit: en fait tu as un seul Lieu, alors il faut soit vehicules.Lieu = Lieux.idLieux soit Lieux.idLieu = 1
par mesuis de compréhension j’aurais plutot fait, pour les date :
… AND (MONTH(lots.dateLot) BETWEEN 1 AND 11) AND YEAR(lots.dateLot)=2005
et comme a dit deltree, t’as oublié la jointure sur la table des lieux
de préférence, utilise des alias de table, c’est plus pratique pour ecrire les requetes
(SELECT n.Nature, COUNT( v.chassis ),l.Lieu FROM natures n, vehicules v, lieux l …)
Ayé ca fonctionne, pas motivé pour poster le code là (faut faire un coup de clef usb ^^) Merci à vous
EDIT : 100 000 ème post du forum programmation champagne !!