Bonjour à tous !
Pour résumer ma situation, je sélectionne des produits et leurs informations propres dans une table produits "T_Prod" ainsi que des éléments se trouvant dans d'autres tables, reliées par des clés étrangères.
Voici, dans un premier temps, ma requête :
Le problème se situe au niveau de "V.Prix_Variante" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SELECT C.Nom_Cat, C.TxtAlt_Cat, C.Pos_Cat, L.Classe_Lib, P.Titre_Prod, P.SousTitre_Prod, P.Prix_Prod, P.PourcentPromo_Prod, P.PrixOkaz_Prod, P.Img_Prod, P.Video_Prod, P.HauteurVideo_Prod, A.Nom_Aut, V.Prix_Variante FROM T_Cat C JOIN T_Prod P ON P.Id_Cat = C.Id_Cat LEFT OUTER JOIN T_Lib L ON P.Id_Lib = L.Id_Lib LEFT OUTER JOIN T_Aut A ON P.Id_Aut = A.Id_Aut LEFT OUTER JOIN T_Variante V ON P.Id_Prod = V.Id_Prod WHERE P.Vignette_Prod = 'True' ORDER BY C.Pos_Cat
Mes produits peuvent en faite chacun avoir des déclinaisons : "ce produit est disponible en bleu et en rouge" et chacune de ces variantes est susceptible d'avoir un prix bien distinct : "la version bleu de ce produit coûte 5€, la rouge coûte 6€". Ces prix sont indiqués dans une colonne "Prix_Variante" de la table "T_Variante" à laquelle j'ai affecté un alias "V" lors de la requête (d'où le "V.Prix_Variante").
Pour repérer quelles variantes sont affectées à quel produit (je pars du principe qu'une variante ne peut être affectée qu'à un seul produit et qu'un produit peut avoir plusieurs variantes : relation 1-N), je me base sur la colonne "Id_Prod" de la table "T_Variante", dont la valeur doit correspondre à l'une des entrées de la colonne "Id_Prod" de la table "T_Prod" (voir le schéma relationnel).
La requête fonctionne mais, forcément, si mon produit écope de plusieurs variantes, alors j'aurai autant de lignes qu'il y a des variantes dans mes résultats de requête. Ces lignes seront en tout point identiques, à l'exception du prix de la variante.
Mon souhait est le suivant :
Que je ne récupère qu'une seule entrée pour un produit, avec dans la colonne "Prix_Variante" la valeur la plus petite parmi l'ensemble des prix de variantes recensés.
J'ai déjà repéré la fonction "MIN" et l'instruction "GROUP BY" qui pourraient répondre à mes attentes. J'ai essayé de cette façon, mais sans succès :
Merci d'avance pour vos réponses qui, j’espère, me permettront de me sortir de ce bourbier qui me bloque depuis des jours...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 SELECT C.Nom_Cat, C.TxtAlt_Cat, C.Pos_Cat, L.Classe_Lib, P.Titre_Prod, P.SousTitre_Prod, P.Prix_Prod, P.PourcentPromo_Prod, P.PrixOkaz_Prod, P.Img_Prod, P.Video_Prod, P.HauteurVideo_Prod, A.Nom_Aut, MIN(V.Prix_Variante) FROM T_Cat C JOIN T_Prod P ON P.Id_Cat = C.Id_Cat LEFT OUTER JOIN T_Lib L ON P.Id_Lib = L.Id_Lib LEFT OUTER JOIN T_Aut A ON P.Id_Aut = A.Id_Aut LEFT OUTER JOIN T_Variante V ON P.Id_Prod = V.Id_Prod WHERE P.Vignette_Prod = 'True' GROUP BY P.Id_Prod ORDER BY C.Pos_Cat
Partager