Pbme de jointure (débutant) - SQL/NoSQL - Programmation
Marsh Posté le 02-03-2011 à 09:53:42
Ne fais pas les jointures dans le where, c'est une hérésie, si tu veux faire des équi-jointures, utilise INNER JOIN
Dans ton cas, tu as besoin d'un LEFT JOIN, renseigne toi là dessus.
Marsh Posté le 02-03-2011 à 10:04:56
Merci antac
J'ai modifié ma requête pour la suivante :
SELECT Produits.*, AVG(Notes.note) AS noteMoyenne, COUNT(Notes.id_note) AS noteTotal FROM Produits LEFT JOIN Notes ON Produits.id_prod = Notes.id_prod GROUP BY Produit.id_prod ORDER BY noteMoyenne DESC, noteTotal DESC
Et celà semble fonctionner. Seul petit bémol, lorsqu'un produit ne possède aucune notation, le moyenne qui ressort est une valeur "NULL". Comment pourrais-je faire pour que la valeur de sortie soit "0" ?
Marsh Posté le 02-03-2011 à 10:49:48
Je crois avoir trouvé la solution avec l'instruction "COALESCE".
Merci pour le coup de main.
Marsh Posté le 02-03-2011 à 10:59:05
Si tu utilises MySQL,
SELECT Produits.*, IFNULL(AVG(Notes.note),0) AS noteMoyenne, COUNT(Notes.id_note) AS noteTotal
FROM Produits LEFT JOIN Notes ON Produits.id_prod = Notes.id_prod GROUP BY Produit.id_prod
ORDER BY noteMoyenne DESC, noteTotal DESC
Marsh Posté le 02-03-2011 à 09:41:05
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à :
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 bien sûr "0" comme moyenne et total des notes.
Quelqu'un pourrait-il m'éclairer sur le sujet ?
Merci d'avance.