Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 10/07/2011, 16h10   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Par défaut Requête SQL insatisfaisante

Bonjour,
Code :
1
2
3
4
5
 
SELECT MONTH(`date_engagement`) as mois, COUNT(*) as nb, SUM(`montant`) as montant
FROM `depenses` 
WHERE YEAR(`date_engagement`) = '2011'
GROUP BY mois
Je souhaite que cette requête me retourne même les mois dont "nb" et "montant" sont NULL.
Pour le moment elle retourne uniquement les mois dont "nb" et "montant" sont non null.

Merci d'avance.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2011, 18h56   #2
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Code :
1
2
3
4
5
6
 
SELECT MONTH(d1.date_engagement) as mois, COUNT(*) as nb_depenses, SUM(d2.montant) as montant_depenses
FROM depenses d1
LEFT JOIN depenses d2 ON d1.id_depense = d2.id_depense
WHERE MONTH(d1.date_engagement) BETWEEN 7 AND 8
GROUP BY mois
J'ai essayé la requête ci-dessus même résultat.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/07/2011, 19h37   #3
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : juillet 2011
Messages : 15
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2011
Messages : 15
Points : 26
Points : 26
Il me semble que si tu n'as pas d'enregistrement pour un mois, il ne sera pas possible directement "d'inventer" des mois pour afficher qu'il n'y si est rien passé. Je proposerais donc de faire quelque chose comme ce qui vient même si je n'en suis pas certain, j'espère que le principe peut être utile.

Code :
1
2
3
4
5
 
SELECT t.mois, COUNT(depenses.*) as nb, SUM(depenses.montant) as montant 
FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) as t(mois) 
LEFT JOIN depenses ON MONTH(depenses.date_engagement)=t.mois
GROUP BY t.mois
niehu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 00h23   #4
Membre expérimenté
 
Avatar de papyphp
 
Inscription : avril 2005
Messages : 425
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Belgique

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 425
Points : 545
Points : 545
Bonsoir,

La remarque de Niehu me semble tout à fait correcte.
Je solutionnerais ce problème dans php de la manière suivante.
Créer un tableau qui contient pour chaque mois un sous-tableau ( nb, montant)
Code :
1
2
3
for ($i=1; $i<=12; $i++){
	table[$i] = array('nb' => 0, 'montant' => 0);
	}
puis dans le traitement des résultats de la requête je ferais
Code :
1
2
3
4
while($ligne = mysql_fetch_assoc($res)){
	$table[$ligne['mois']]['nb'] = $ligne['nb'];
	$table[$ligne['mois']]['montant'] = $ligne['montant'];
	}
De la sorte vous obtiendriez un tableau qui aurait une entrée pour chaque mois
A+
__________________
Lu kinze d' awousse, la Vierje arandje û dusbrôle lu timp. Et ce coup ci, elle ne nous a pas ratés
papyphp 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 23h38.


 
 
 
 
Partenaires

Hébergement Web