Bonjour à tous,

Voila mon Souci, j'ai 3 tables :

produits
id | ref ...
2 | AA
2 | BB
3 | CC
4 | DD

produits_filtres
produits_id | filtres_id
2 | 9
2 | 11
3 | 11
4 | 12

filtres
id | NameFiltre | ValueFiltre
8 | Themes | Plage
9 | Themes | Ville
10 | Motifs | Rayures
11 | Motifs | Zèbre
12 | style | Rock

J'ai une requête qui me permets de lister tous les filtres utilisé par les produits :
SELECT F.* FROM filtres F

JOIN produits\_filtres PF
ON PF.filtres\_id = F.id

JOIN produits P
ON P.id = PF.produits\_id

GROUP BY F.id

Résultat :
9 Themes Ville
11 Motifs Zèbre
12 style Rock

Mais je n'arrive pas à lister les filtres qu'utilisent les produits dont un filtre est déjà utilisé ex :

Si ma requête cible les produits dont PF.filtres_id = 9,
j'aimerais que la liste des filtres utilisé par PF.produits_id, et qui ont PF.filtres_id = 9
Résultat souhaité :
9 Themes Ville
11 Motifs Zèbre

j'ai testé avec une sous requête : WHERE P.id IN (SELECT P.id FROM produits PF WHERE PF.filtres\_id = 9 )
Mais non...

en espérant avoir été assez explicite.

Merci de votre aide,

Franck

1 réponse


yceoshda
Réponse acceptée

Bonjour,

Il faut effectivement passer par une sous-requete, impossible de mettre plusieurs conditions du type 'colonne=valeur' pour la meme colonne.
En reprenant les donnees de test:

mysql> select f.* from filtre f, produit_filtre pf where f.id=pf.filtre_id and pf.produit_id in (select pf.produit_id from produit_filtre pf where pf.filtre_id=9);
+------+--------+-------+
| id | name | value |
+------+--------+-------+
| 9 | theme | ville |
| 11 | motifs | zebre |
+------+--------+-------+
2 rows in set (0.01 sec)

C'est pas forcement la methode la plus propre mais a priori ca marche !

J'espere que ca aide.