Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels 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 29/07/2011, 13h13   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 17
Points : 2
Points : 2
Par défaut jointure sans enregistrement lié

Bonjour,

je dois faire une requête comme celle-ci

Code :
1
2
3
SELECT nom, count(r.idclasse) AS nb_resa FROM classe
INNER JOIN reservation r ON r.idclasse = c.idclasse
GROUP BY reservation.idclasse
pour trouver le nombre de réservations dans une classe.
Le problème est que lorsqu'il n'y a pas encore de réservations, ça ne me renvoie pas la ligne.
Je ne peux pas faire de 'union', vu la taille de la requête.
De plus (pour info), je passe par le framework Zend.

Il doit bien y avoir une solution pour avoir au moins le nom, voire le nombre de resas quand il y en a !?

Merci d'avance,
Nico.
KLKJHLKJH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h33   #2
Invité de passage
 
Inscription : janvier 2007
Messages : 17
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 17
Points : 2
Points : 2
Le problème était le group by, que j'aurais dû faire sur le 'classe' et non sur 'reservation'...
Sinon tous les enregistrements ne contenant pas de réservations se retrouvent regroupés ensemble.
Ca donne :
Code :
1
2
3
SELECT nom, count(r.idclasse) AS nb_resa FROM classe
INNER JOIN reservation r ON r.idclasse = c.idclasse
GROUP BY classe.idclasse
Merci!
KLKJHLKJH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h48   #3
Membre régulier
 
Inscription : décembre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 64
Points : 87
Points : 87
Bonjour,

Dans le cas où tu veux les lignes qui n'ont pas de lien avec l'autre table (pas de réservation en l’occurrence, il faut faire une jointure externe, à savoir left outer join dans ton cas.


Petit conseil, il y a plein de tutos pour SQL, en particulier sur ce site, n'hésite pas à les explorer, ça te fera gagner du temps dans tes développements, véridique !

Pour info, en plus de la jointure qui n'est pas bonne, tu as 2 erreurs qu'il te faudra corriger pour que ça marche parfaitement, mais là je te laisse chercher, tu vas les trouver c'est sûr !

Cordialement
semaphore1984 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/07/2011, 15h56   #4
Membre régulier
 
Inscription : décembre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 64
Points : 87
Points : 87
re-bonjour,

excuses moi j'ai été lent à répondre et tu posté avant moi, tu as trouvé le pb group by mais il reste quand même 2 choses fausses dans ta requête :
le type de jointure + l'alias 'c' qui est manquant. Attention à utiliser les alias à fond ou pas du tout, sinon, c'est source d'erreurs (et ça n'est pas lisible)
semaphore1984 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h12.


 
 
 
 
Partenaires

Hébergement Web