Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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/03/2011, 08h04   #1
Invité de passage
 
Inscription : mars 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 4
Points : 1
Points : 1
Par défaut Pbme de jointure

Bonjour à tous,

Je me tourne vers vous pour un problème que je rencontre actuellement sur une simple requête Sql. Je vous exposes mon problème :

Je possède 2 tables ("Produits" et "Notes"). Les utilisateurs peuvent apprécier les produits en leur donnant une note. Ma requête a pour but de retourner chaque produits avec ne nombre de notes attribuées ainsi que la moyenne des notes (trié sur les moyennes décroissantes).

Schéma grossier de mes 2 tables :

Produit
----------
id_prod
nom_prod

Notes
----------
id_note
id_prod
note

Ma requête actuelle resseble à celà :

Code :
1
2
 
SELECT Produits.*, AVG(Notes.note) AS noteMoyenne, COUNT(Notes.id_note) AS noteTotal FROM Produits, Notes WHERE Produits.id_prod = Notes.id_prod ORDER BY noteMoyenne DESC, noteTotal DESC
Le problème de ma requête est qu'elle retourne uniquement les produits qui ont déjà été noté. Les autres ne s'affichent pas. Hors, je souhaiterais que les produits qui n'ont pas encore été noté puissent également s'afficher avec biensûr "0" comme moyenne et total des notes.


Quelqu'un pourrait-il m'éclairer sur le sujet ?

Merci d'avance.
Frostek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 08h53   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
bonjour,

Lisez ceci : http://sqlpro.developpez.com/cours/sqlaz/jointures/

Et en particulier le chapitre sur les "LEFT OUTER JOIN".

Et pendant que vous y etes lisez aussi http://sqlpro.developpez.com/cours/sqlaz/ensembles/
pour les "GROUP BY"
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 09h16   #3
Invité de passage
 
Inscription : mars 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 4
Points : 1
Points : 1
Bonjour punkoff et merci d'avoir répondu à mon problème.

Cependant, n'étant pas du tout de ce domaine et étant contraint de trouver une solution rapidement, auriez-vous une solution concrète à me proposer ? J'ai essayer plusieurs solutions sans vraiment savoir ce que je fais mais en vain.
Je parcours actuellement les différents cours proposés sur ce même site mais j'avoue être complètement "largué" par cette technologie.

Je vous remercies d'avance.
Frostek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2011, 15h02   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 993
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 993
Points : 18 246
Points : 18 246
Envoyer un message via MSN à CinePhil
1) Les jointures s'écrivent depuis 1992 selon la norme avec l'opérateur JOIN.

2) Évitez la guerre des étoiles !

Code :
1
2
3
4
5
6
7
8
SELECT p.id_prod,
    AVG(Notes.note) AS noteMoyenne, 
    COUNT(Notes.id_note) AS noteTotal 
FROM Produits p
LEFT OUTER JOIN Notes n ON p.id_prod = n.id_prod
GROUP BY p.id_prod
ORDER BY AVG(Notes.note) DESC, 
    COUNT(Notes.id_note) DESC
__________________
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
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web