Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 02/02/2011, 09h52   #1
Nouveau Membre du Club
 
Homme
Inscription : mars 2010
Messages : 79
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2010
Messages : 79
Points : 30
Points : 30
Par défaut éviter le "aucun enregistrement"

Bonjour à tous,

Ci-dessous, une requête que j'exécute depuis phpMyAdmin. Elle me pose problème lorsque MySQL ne retourne aucun enregistrement.

Code :
1
2
3
4
SELECT Montant, Annee, Region
FROM achat
WHERE (Annee = 2003 OR Annee = 2004) AND (Region = '3') AND CodeAch = '111'
GROUP BY Annee, Region
Si j'ai des achats en 2003 et en 2004 pour le code 111, le tableau retourné ressemble à ça :

Montant...Annee...Region
..25,4.......2003........3...
..17,5.......2004........3...

Si je n'ai que des achats en 2003 pour le code 111, le tableau retourné ressemble à ça :

Montant...Annee...Region
..25,4.......2003........3...

Est-il possible d'ajouter une option à la requête SQL pour avoir un tableau du type :

Montant...Annee...Region
..25,4.......2003........3...
....0.........2004........3...
socaw est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 11h39   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 990
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 10 990
Points : 18 241
Points : 18 241
Envoyer un message via MSN à CinePhil
Il te faut une table des années et faire une jointure externe à partir de celle-ci.
De plus, il manque la somme dans ton SELECT ; là tu vas avoir l'un des montants de l'année au hasard.
Dans la mesure où tu restreints à la région 3, pourquoi l'utiliser dans le regroupement ?
Si la colonne Region et/ou la colonne CodeAch est de type numérique, inutile de mettre les valeurs cherchées entre apostrophe. J'ai quand même supposé ci-dessous qu'un code peut être alphanumérique mais que la région est son identifiant de type entier et auto-incrémenté dans la table des régions.
COALESCE permet d'afficher le 0 au lieu de NULL quand il n'y a pas d'achat dans l'année.
Code :
1
2
3
4
5
6
7
SELECT an.Annee, COALESCE(SUM(ac.Montant), 0) AS Total_montants
FROM annee an
LEFT OUTER JOIN achat ac ON ac.Annee = an.Annee
WHERE (an.Annee = 2003 OR an.Annee = 2004) 
    AND ac.Region = 3 
    AND ac.CodeAch = '111'
GROUP BY an.Annee
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 16h57   #3
Nouveau Membre du Club
 
Homme
Inscription : mars 2010
Messages : 79
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations forums :
Inscription : mars 2010
Messages : 79
Points : 30
Points : 30
Merci de ta réponse.
Je réagis tardivement, mais j'ai complètement revu mon approche de construction de la requête.
Effectivement le champ "code" est alphanumérique, mais c'est aussi le cas du champ "region" et la restriction sur la région me servait uniquement pour visualiser rapidement le résultat, sinon ma requête portait sur plusieurs régions et je devais faire un regroupement après.
De plus j'avais déjà une table externe avec les années, donc ça fonctionne avec la jointure et COALESCE.
socaw 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 07h26.


 
 
 
 
Partenaires

Hébergement Web