Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/06/2006, 19h44   #1
000
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 36
Points : 25
Points : 25
Par défaut [Requete] Pb avec LEFT JOIN

Bonjour,

J'aimerais avoir pour chaque mois le nombre de commande effectué.
J'ai réalisé la requete suivante:

Code :
1
2
3
4
5
6
7
8
 
 
SELECT mois.numero, count( commande.id ) 
FROM (
mois
LEFT JOIN commande ON mois.numero = MONTH( commande.date ) 
)
GROUP BY MONTH( commande.date )
mais elle me renvoie ce resultat:

Code :
1
2
3
4
5
6
7
8
9
10
11
 
numero  count( commande . id )  
9               0 
1               1 
2               1 
3               1 
4               1 
5              33 
6              38 
7               1 
8               1
alors que je veux:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
numero  count( commande . id ) 
12              0
11              0
10              0
9               0 
1               1 
2               1 
3               1 
4               1 
5              33 
6              38 
7               1 
8               1
Avez vous des idées ?
000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2006, 20h23   #2
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
Salut,

Citation:
SELECT MONTH( commande.date ), count( commande.id )
FROM commande
GROUP BY MONTH( commande.date )
Tout simplement,

bbye
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2006, 11h06   #3
000
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 36
Points : 25
Points : 25
Mais avec cette requete, s' il n'y a pas de commande pour un mois, j'ai pas les 12 mois avec le nombre de commande.

En fait c'est pas exactement cette requete que je veux , je l'ai simplifié pour le forum.

Est ce que LEFT JOIN fonctionne seulement avec des attributs des tables ?
Peut on utliser des fonctions (MONTH() par exemple ) avec LEFT JOIN ?
000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2006, 18h20   #4
000
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 36
Points : 25
Points : 25
Bon j'ai réussi à avoir le resultat voulu mais la requete est très moche !!!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
 
(
SELECT numero, count( montant ) 
FROM mois, commande
WHERE numero = MONTH( commande.date ) 
GROUP BY MONTH( commande.date ) 
)
UNION (
 
SELECT numero, 0
FROM mois
WHERE numero NOT 
IN (
 
SELECT numero
FROM mois, commande
WHERE numero = MONTH( commande.date ) 
GROUP BY MONTH( commande.date ) 
)
)
000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2006, 20h20   #5
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
Salut,

Citation:
Mais avec cette requete, s' il n'y a pas de commande pour un mois, j'ai pas les 12 mois avec le nombre de commande.
Oui c'est vrai. Perso pour corriger cela j'avais utiliser PHP. Histoire de ne pas surcharger ma requete.


Citation:
Est ce que LEFT JOIN fonctionne seulement avec des attributs des tables ?
Je n'ai pas compris ta question dsl :s
Citation:
Peut on utliser des fonctions (MONTH() par exemple ) avec LEFT JOIN ?
Je n'ai jamais tester, mais la jointure peut se faire avec cette fonction surement.

Qd à la requete que tu as fais, perso je n'aime pas non plus, mais je ne vois pas d'autre solutions en SQL.
Encore une fois, à mon sens le plus simple, le plus performant aussi, serait de corriger cela avec PHP.

bbye
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2006, 23h40   #6
000
Nouveau Membre du Club
 
Inscription : décembre 2005
Messages : 36
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 36
Points : 25
Points : 25
En fait, le probleme venait de mon GROUP BY, voici la solution:

Code :
1
2
3
4
5
6
7
 
 
SELECT mois.numero AS mois, count( commande.id ) AS nb_cdes
FROM mois
LEFT JOIN commande ON mois.numero = MONTH( commande.date ) 
GROUP BY mois.numero
ORDER BY mois.numero
000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2006, 00h06   #7
Membre Expert
 
Inscription : juillet 2004
Messages : 1 033
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 1 033
Points : 1 050
Points : 1 050
hmm je n'avait pas vu que tu avais une table mois...... fatigue quand tu me tiens
ePoX est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h03.


 
 
 
 
Partenaires

Hébergement Web