Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de requete

Dans la jointure ?

    20 avril 2011 à 23:31:17

    Bonjour, j'ai un petit problème de requete, Je vous explique :

    Je dispose de 3 tables :
    Une table FAMILLE(cdFam,nomFam,adFam,...)
    Une table STAGE(cdStage,dateStage,...)
    Une table PARTICIPATION_FAMILLE(cdFam,cdStage,nbStagiaires)

    Une famille peut participer à plusieurs stage et possède un nombre de stagiaire pour ceux ci

    Et je voudrais lister toutes les familles avec le nombre de stagiaires qu'elle prennent pour les stages numero 1 et numero 3

    Je fais donc la requete suivante avec 2 jointures externe:

    SELECT f.cdFam AS codeFam,
    f.nomFam AS famille,
    f.adFam AS adresse,
    IFNULL(pfJ.nbStagiaire,'0') AS nbStagiaireJuillet,
    IFNULL(pfA.nbStagiaire,'0') AS nbStagiaireAout
    FROM famille f 
    LEFT JOIN participation_famille pfJ ON pfJ.cdFam=f.cdFam 
    LEFT JOIN participation_famille pfA ON pfA.cdFam=f.cdFam 
    WHERE 
    pfJ.cdStage=1
    AND pfA.cdStage=3
    


    Mais le problème c'est que malgré le fait que j'ai mis les deux LEFT JOIN dans la requête, la requete ne me liste que les familles qui sont inscrit pour les stages 3 et 1 en même temps alors que je voudrais qu'il me liste aussi les familles qui ne participent pas à ces stages et afficher alors le nbStagiaireJuillet et Aout à 0

    Voilà, Avez-vous une idée ?
    Merci d'avance,
    baignoire
    • Partager sur Facebook
    • Partager sur Twitter
      20 avril 2011 à 23:43:23

      Normal, tu demandes :

      WHERE pfJ.cdStage=1 AND pfA.cdStage=3

      Donc ni l'un ni l'autre ne peuvent être NULL, donc ton LEFT JOIN est transformé en JOIN.

      Solution :

      SELECT f.cdFam AS codeFam,
      f.nomFam AS famille,
      f.adFam AS adresse,
      pf.*
      FROM famille f 
      JOIN participation_famille pf ON pf.cdFam=f.cdFam 
      WHERE 
      pf.cdStage IN (1,3)
      


      Le reste est du cosmétique, à faire en PHP donc.
      • Partager sur Facebook
      • Partager sur Twitter
        20 avril 2011 à 23:56:09

        Merci de ta réponse,
        Le problème c'est que je veux quand même garder mes deux variables NbStagiaireJuillet et NbStagiaireAout et mes deux jointures , ceci dans le but de d'afficher ces deux informations dans deux colonnes

        D'autre part la requête que tu viens de me donner n'affiche encore que les familles qui participent au stages 1 et 3 et une ligne pour chaque stage
        • Partager sur Facebook
        • Partager sur Twitter
          21 avril 2011 à 9:17:28

          Citation : baignoire

          la requête que tu viens de me donner n'affiche encore que les familles qui participent au stages 1 et 3 et une ligne pour chaque stage



          Aux stages 1 ou 3 ou les deux ...

          Pour le reste, c'est de la mise en page donc pas du tout le rôle du SQL. Mets le résultat de la requête dans un tableau associatif 2D et c'est réglé.
          • Partager sur Facebook
          • Partager sur Twitter
            21 avril 2011 à 11:25:57

            Bonjour ta requête renvoie une ligne pour chaque participation de famille à un stage 1 ou 3 et ne renvoie pas les familles n'ayant pas de participation à un stage.

            Il doit être possible de faire la requête brut non ?
            • Partager sur Facebook
            • Partager sur Twitter
              21 avril 2011 à 15:12:00

              Ça fonctionne ça? Pour le OUTER, je fait énormément de T-SQL donc je sais pas si sa fonctionne partout :-°

              SELECT f.cdFam AS codeFam,
              f.nomFam AS famille,
              f.adFam AS adresse,
              IFNULL(pfJ.nbStagiaire,'0') AS nbStagiaireJuillet,
              IFNULL(pfA.nbStagiaire,'0') AS nbStagiaireAout
              FROM famille f 
              LEFT OUTER JOIN participation_famille pfJ ON pfJ.cdFam=f.cdFam 
              LEFT OUTER JOIN participation_famille pfA ON pfA.cdFam=f.cdFam 
              WHERE 
              (pfJ.cdStage=1 OR pfJ.cdStage IS NULL)
              AND (pfA.cdStage=3 OR pfA.cdStage IS NULL)
              
              • Partager sur Facebook
              • Partager sur Twitter
                22 avril 2011 à 11:25:21

                Bonjour,
                c'est déjà pas mal, ta requete affiche les familles qui participent au stage 1 et 2 et aussi les familles qui ne participent pas au stage mais bizarrement pas ceux qui ne participent qu'a un seul des deux stages !
                J'arrive pas à comprendre ?!
                • Partager sur Facebook
                • Partager sur Twitter
                  24 avril 2011 à 15:43:31

                  up, quelqu'un a une idée ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 avril 2011 à 17:10:56

                    Tu a essayer de remplacer le AND du WHERE par un OR?
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème de requete

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown