PB résultat Requête SQL avec jointure 3 tables

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par flipou, 12 Juin 2013.

  1. flipou
    flipou Nouveau WRInaute
    Inscrit:
    6 Septembre 2007
    Messages:
    17
    J'aime reçus:
    0
    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
     
  2. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    Bonjour,

    Je ne connais pas votre niveau en sql mais si vous êtes débutant, il vaut peut-être mieux utiliser les jointures avec des "where" que les "join" qui joignent à droite ou à gauche suivant les configurations....

    Selon les extraits de tables donnés, je ne vois pas comment le résultat souhaité pourrait sortir. Si on ne choisi qui 9 comme id_produit, il est normal que seuls les produits correspondants soient retournés par la requête.
    Une petite clarification est sans doute nécessaire pour pouvoir aider de manière plus efficace.
     
  3. flipou
    flipou Nouveau WRInaute
    Inscrit:
    6 Septembre 2007
    Messages:
    17
    J'aime reçus:
    0
    pas facile je sais...

    en fait

    si ds la Table "produits_filtres "
    filtres_id = 9
    donc
    produits_id = 2

    Mais d'autred 2 ds la colonne produits_id correspondant à d'autres filtres_id

    c'est l'ensemble de ces filtres que je souhaite lister pour avoir ce résultat :
    9 Themes Ville (car 9 est bien de la colonne produits_filtres = filtres.id )
    11 Motifs Zèbre (et il ont comme valeur commune produits_id = 2 ou relation ds la mm Table)

    Merci
     
  4. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    Personnellement, je diviserais en deux requêtes et je ne suis pas sûr de pouvoir aider sur une requête de cette complexité. S'il n'y a qu'un id_produit, tu peux utiliser "having" mais dans d'autres cas, je ne vois pas trop, faudrait que je m'y penche vraiment dessus !
     
  5. flipou
    flipou Nouveau WRInaute
    Inscrit:
    6 Septembre 2007
    Messages:
    17
    J'aime reçus:
    0
    c'est pour cela que je parlais de sous requêtes,

    Merci quand même.
     
  6. Supermaury
    Supermaury WRInaute discret
    Inscrit:
    25 Mars 2009
    Messages:
    144
    J'aime reçus:
    5
    Bonjour.

    Sauf erreur, cette requête renvoie ce que tu cherches :

    Code:
    select id, nameFiltre, ValueFiltre from filtres where id in (select filtres_id from produits_filtres  group by  filtres_id, produits_id   having produits_id in (select produits_id from produits_filtres where filtres_id=9))
    Bonne fin d'am.

    @++
     
  7. noren
    noren WRInaute accro
    Inscrit:
    8 Avril 2011
    Messages:
    2 816
    J'aime reçus:
    18
    @Supermaury : je n'ai pas la solution au problème mais une chose est sur c'est que la requête que tu indique bouffe énormement en ressources

    il y a tous les ingrédients qui font exploser les serveurs (in, requêtes imbriqués, group by et having)
    :wink:
     
  8. flipou
    flipou Nouveau WRInaute
    Inscrit:
    6 Septembre 2007
    Messages:
    17
    J'aime reçus:
    0
    Bingo !

    Grand Respect !!!

    J'ai bien le résultat voulu !

    je vais méditer dessus...


    Merci.
     
  9. Supermaury
    Supermaury WRInaute discret
    Inscrit:
    25 Mars 2009
    Messages:
    144
    J'aime reçus:
    5
    Bonjour Noren.

    C'est clair que je ne me suis pas posé là question de charge. J'ai juste cherché à faire la requête en une seule instruction comme demandé :D

    Après, s'il fait ça en plusieurs requêtes successives dans son code PHP, ça ne doit pas être bien compliqué.

    @++!
     
  10. flipou
    flipou Nouveau WRInaute
    Inscrit:
    6 Septembre 2007
    Messages:
    17
    J'aime reçus:
    0
    je vais tester les 2 versions par curiosité,

    Mais de toute façon le résultat sera mis en cache.
     
  11. flipou
    flipou Nouveau WRInaute
    Inscrit:
    6 Septembre 2007
    Messages:
    17
    J'aime reçus:
    0
    Comment le feriez vous en 2 requêtes ? je nage complet pour le coup

    je reprend ma jointure initiale et refait une requête sur le résultat ?


    Merci
     
  12. flipou
    flipou Nouveau WRInaute
    Inscrit:
    6 Septembre 2007
    Messages:
    17
    J'aime reçus:
    0
    Ok trouvé !

    pour ceux qui veulent :

    1ere requete :
    Code:
    SELECT * FROM `produits_filtres` where 
    produits_id = (select produits_id from produits_filtres where filtres_id=9)
    GROUP BY `produits_filtres`.`filtres_id`

    2eme requete après mise en tableau des resultats :
    Code:
    SELECT * FROM filtres WHERE id in(9,11)
     
Chargement...
Similar Threads - résultat Requête SQL Forum Date
requete Mysql et classement des résultats Administration d'un site Web 1 Novembre 2015
[SQL] Meme requete qui ne donne pas le meme résultat Développement d'un site Web ou d'une appli mobile 12 Avril 2012
[mysql] trier les résultats d'une requête selon une table non liée à la requête Développement d'un site Web ou d'une appli mobile 15 Avril 2011
Comment mixer les résultats provenant de 4 requêtes SQL ? Développement d'un site Web ou d'une appli mobile 1 Août 2010
affichage des résultats d'une requête SQL Développement d'un site Web ou d'une appli mobile 27 Septembre 2009
Récupérer l'avant dernier résultat d'une requête mysql Développement d'un site Web ou d'une appli mobile 23 Mars 2009
resultat requete sql avec x occurence Développement d'un site Web ou d'une appli mobile 19 Septembre 2008
Php/MySQL Utiliser pls fois le résultat d'une seule requête Développement d'un site Web ou d'une appli mobile 25 Avril 2008
Récupérer résultat requête php/mysql dans Flash Mx Développement d'un site Web ou d'une appli mobile 29 Septembre 2006
Requête Msql pour afficher résultat (fr) , (en) équivalent? Développement d'un site Web ou d'une appli mobile 29 Juillet 2006
Doublons dans les résultats d'une requete sql Administration d'un site Web 8 Octobre 2004
Résultats étranges pour la requête site: Problèmes de référencement spécifiques à vos sites 26 Août 2019
Résultat de recherche google sans méta-description en fonction de la requête Problèmes de référencement spécifiques à vos sites 8 Février 2019
A/B testing de Google entre deux résultats de recherche pour une requête donnée ? Débuter en référencement 26 Octobre 2017
Requête avec seulement 20 résultats Crawl et indexation Google, sitemaps 9 Juin 2014
Comment avoir uniquement ma page d'accueil en résultat: sur requête "nom du site" Débuter en référencement 29 Mai 2012
Résultats de requêtes Google Débuter en référencement 23 Avril 2012
requete google donne différents résultats en fonction navigateur Référencement Google 18 Janvier 2012
MAJ de l'algo Google : clusterisation des résultats sur les requêtes navigationelles Référencement Google 1 Septembre 2010
Disparition nombres de résultats dans requetes Google Google : l'entreprise, les sites web, les services 28 Mai 2010