Partage
  • Partager sur Facebook
  • Partager sur Twitter

afficher des données avec un SELECT

quand il y a plusieurs données en jeu

Sujet résolu
    7 mars 2007 à 15:13:57

    Bonjour, sur le site que je crée, j'ai mis en place (dans un premier temps) une table sur laquelle une colonne recevait de nombreuses informations.

    Le truc, c'est que maintenant, j'ai commencé à remplacer la colonne en question par une table à part et une table pour les faire communiquer.

    Jusque là, aucun problème.

    Sauf que quand j'ai plusieurs données à afficher, l'écran m'affiche

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\...\contenu2.php on line 41 

    voilà le code que j'ai déjà mis :

    if($res1['nbProfs']>1)
            {
                    for($j = 0; $j<$res1['nbProfs']; $j++)
                    {
                            $req2 = mysql_query("select prenomProf, nomProf from professeur where codeProf = (select codeProf from enseigner where nomInstrument = '".$res0[0]."');");     
                    $res2 = mysql_fetch_array($req2);
                    echo $res2[0]." ".$res2[1]." ";
                    }
                   
            }


    Et en sql voilà les tables que j'ai :



    CREATE TABLE `professeur` (
      `codeProf` varchar(100) NOT NULL DEFAULT '',
      `nomProf` varchar(50) NOT NULL DEFAULT '',
      `prenomProf` varchar(50) NOT NULL DEFAULT '',
      PRIMARY KEY  (`codeProf`)
    ) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

    CREATE TABLE `instrument` (
      `nomInstrument` varchar(100) NOT NULL DEFAULT '',
      `numCategorie` int(2) NOT NULL DEFAULT '0',
      `age` int(2) NOT NULL DEFAULT '0',
      `cours` mediumtext NOT NULL,
      `professeur` text NOT NULL,
      PRIMARY KEY  (`nomInstrument`),
      KEY `fk_categorie` (`numCategorie`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

    CREATE TABLE `enseigner` (
      `codeProf` varchar(100) NOT NULL DEFAULT '',
      `nomInstrument` varchar(100) NOT NULL DEFAULT ''
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


    je sais qu'une table et une colonne qui ont le meme nom n'est pas bien, mais quand la requête marchera, je retirerai la colonne professeur.

    Si vous avez une idée de la solution, merci de me la faire parvenir.
    • Partager sur Facebook
    • Partager sur Twitter
    Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
      7 mars 2007 à 15:35:45

      $req2 = mysql_query("select prenomProf, nomProf from professeur where codeProf = (select codeProf from enseigner where nomInstrument = '".$res0[0]."');");   


      Ton erreur se trouve ici :p

      where codeProf = (...);

      Remplace ce bout de code par ça :

      $variable = mysql_query("SELECT codeProf FROM enseigner WHERE nomInsctrument='$res0[0]'");
      $req2 = mysql_query("SELECT prenomProf, nomProf FROM professeur WHERE codeProf='$variable'");


      N'oublies pas qu'il est impossible de mettre une requête SQL à l'intérieur d'une autre ! Si tu as besoin de 2 requêtes SQL, créer une variable pour la première, et pour la deuxième, au lieu de mettre la première requête, tu met simplement la variable ;)
      • Partager sur Facebook
      • Partager sur Twitter
        7 mars 2007 à 15:40:42

        Citation : CrUsTy

        $req2 = mysql_query("select prenomProf, nomProf from professeur where codeProf = (select codeProf from enseigner where nomInstrument = '".$res0[0]."');");   



        Ton erreur se trouve ici :p

        where codeProf = (...);

        Remplace ce bout de code par ça :

        $variable = mysql_query("SELECT codeProf FROM enseigner WHERE nomInsctrument='$res0[0]'");
        $req2 = mysql_query("SELECT prenomProf, nomProf FROM professeur WHERE codeProf='$variable'");



        N'oublies pas qu'il est impossible de mettre une requête SQL à l'intérieur d'une autre ! Si tu as besoin de 2 requêtes SQL, créer une variable pour la première, et pour la deuxième, au lieu de mettre la première requête, tu met simplement la variable ;)



        Suis pas d'accord. Il est possible de mettre une requête SELECT dans un autre SELECT. On appelle ça une sous-requête.

        rga, affiche tout ton code, parce que je ne vois pas d'où viennent toutes tes variables

        Edit : lien pour les sous-requêtes
        • Partager sur Facebook
        • Partager sur Twitter
          7 mars 2007 à 15:45:05

          Citation : NL

          Citation : CrUsTy

          $req2 = mysql_query("select prenomProf, nomProf from professeur where codeProf = (select codeProf from enseigner where nomInstrument = '".$res0[0]."');");   



          Ton erreur se trouve ici :p

          where codeProf = (...);

          Remplace ce bout de code par ça :

          $variable = mysql_query("SELECT codeProf FROM enseigner WHERE nomInsctrument='$res0[0]'");
          $req2 = mysql_query("SELECT prenomProf, nomProf FROM professeur WHERE codeProf='$variable'");



          N'oublies pas qu'il est impossible de mettre une requête SQL à l'intérieur d'une autre ! Si tu as besoin de 2 requêtes SQL, créer une variable pour la première, et pour la deuxième, au lieu de mettre la première requête, tu met simplement la variable ;)



          Suis pas d'accord. Il est possible de mettre une requête SELECT dans un autre SELECT. On appelle ça une sous-requête.

          rga, affiche tout ton code, parce que je ne vois pas d'où viennent toutes tes variables

          Edit : lien pour les sous-requêtes


          Ah je savais pas ça o_O

          Moi quand j'ai plusieurs données à prendre (comme pour le cas ici-présent), j'utilise toujours une variable pour éviter de me compliquer la vie ^^

          Faut m'excuser, j'suis encore novice dans ce domaine...
          • Partager sur Facebook
          • Partager sur Twitter
            7 mars 2007 à 15:58:56

            ok, nl si tu y tiens, voici le code entier :

            $i = $_POST['instrument'];

            if(isset($i))
            {
                    $_SESSION['nomInstrument'] = $i;
            }

            //requête pour sélectionner l'instrument
            $req0 = mysql_query("select * from instrument where nomInstrument = '".$i."';");

            //si il y a l'instrument voulu dans la liste
            while($res0 = mysql_fetch_array($req0))
            {
                    echo "<center><h1>".$res0[0]."</h1><p>";
                    echo "<img src='images\\".$res0[0].".jpg' alt='".$res0[0]."' title='".$res0[0]."'><p>";
                    $req1 = mysql_query("select count(*) as nbProfs from enseigner where nomInstrument = '".$res0[0]."';");
                    $res1 = mysql_fetch_array($req1);
                    if($res1['nbProfs']==1)
                    {
                            $req2 = mysql_query("select prenomProf, nomProf from professeur where codeProf = (select codeProf from enseigner where nomInstrument = '".$i."');");   
                            $res2 = mysql_fetch_array($req2);
                            echo "<p>".$res2[0]." ".$res2[1]." ";
                            echo "enseigne cette discipline. <br>";
                            echo "Les cours commencent à ".$res0['age']." ans. <br>";
                            echo $res0['cours']."<p>";
                    }
                    if($res1['nbProfs']>1)
                    {
                            for($j = 0; $j<$res1['nbProfs']; $j++)
                            {
                                    $req2 = mysql_query("select prenomProf, nomProf from professeur where codeProf = (select codeProf from enseigner where nomInstrument = '".$res0[0]."');");     
                            $res2 = mysql_fetch_array($req2);
                            echo $res2[0]." ".$res2[1].",";
                            }
                            echo " enseignent cette discipline. <br>";
                            echo "Les cours commencent à ".$res0['age']." ans. <br>";
                            echo $res0['cours']."<p>";
                    }
                    if($res1['nbProfs'] == 0)
                    {
                            echo "<p>Personne n'enseigne cette discipline. <br>";
                    }
                    echo $res0['cours']."<p>";
            }

            ça fait long, mais au moins tu comprendras comment j'obtiens certaines variables.
            • Partager sur Facebook
            • Partager sur Twitter
            Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
              7 mars 2007 à 16:06:30

              $req0 = mysql_query("select * from instrument where nomInstrument = '".$i."';");

              //si il y a l'instrument voulu dans la liste
              while($res0 = mysql_fetch_array($req0))
              {
              // Tout le truc à l'intérieur.
              }


              Ta boucle ne sert à rien, puisque tu ne récupères qu'une ligne de la table.

                              $req2 = mysql_query("select prenomProf, nomProf from professeur where codeProf = (select codeProf from enseigner where nomInstrument = '".$i."');")


              Faut pas de ';' après la sous-requête.
              Je vais voir si y a pas d'autres erreurs, j'edit si je trouve. Test déjà sans le point virgule :)

              Edit : j'ai testé chez mwa, ta requête fonctionne sans le ';' après la sous-requête :)
              • Partager sur Facebook
              • Partager sur Twitter
                7 mars 2007 à 16:23:33

                oui, ça marche quand il n'y a qu'un prof pour un instrument, mais quand je veux afficher avec plusieurs profs, ça me marque un message dans lequel mysql refuse d'afficher car la requête retourne plusieurs résultats.

                exemple :
                dans la table prof :
                codeProf     | nomProf | prenomProf 
                ------------------------------------
                violoncelle1 | Dupont  | Jacques    
                piano1       | Martin  | Henri      
                piano2       | Bon     | Jean       
                piano3       | Goutte  | Corinne    
                ------------------------------------

                dans la table instrument (juste colonne 'nomInstrument') :
                nomInstrument
                -------------
                Violoncelle  
                Piano        
                -------------

                et enfin, dans la table enseigner :
                codeProf     | nomInstrument 
                -----------------------------
                violoncelle1 | Violoncelle   
                piano1       | Piano         
                piano2       | Piano         
                piano3       | Piano         
                -----------------------------



                pour le violoncelle, ça va marcher, mais pour le piano, il va dire trop d'occurences à renvoyer.
                • Partager sur Facebook
                • Partager sur Twitter
                Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
                  7 mars 2007 à 16:26:37

                  Si ça te renvoie plusieurs résultats, il faut faire une boucle de tes résultats. En gros, tu peux faire un mysql_num_rows de ta requête (pas trop conseillé mais bon). Si il vaut 1 tu fais pas de boucle, sinon t'en fais une. Ou bien tu peux faire une boucle malgré qu'il n'y aie qu'un résultat, mais j'aime pas trop ^^
                  • Partager sur Facebook
                  • Partager sur Twitter
                    7 mars 2007 à 16:32:14

                    c'es pour ça que je met les conditions :
                    Si(nbProfs == 1)
                    Afficher ("...") FSI
                    Si (nbProfs == 0)
                    Afficher ("...") FSI
                    Si (nbProfs >1)
                    Pour (i=0; i<nbProfs; i++)
                    (requete)
                    Afficher ("...(résultat requete)...") FPR
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
                      8 mars 2007 à 15:43:13

                      J'ai trouvé :)

                      Faut rajouter un petit 'ANY' =>

                      SELECT nomProf, prenomProf FROM professeur WHERE codeProf = ANY (SELECT codeProf FROM enseigner WHERE nomInstrument = 'piano');


                      Bon, faut remplacer piano par une variable, mais ça devrait fonctionner ;)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 mars 2007 à 16:15:33

                        merci Nl, je l'ai placé dans une requete, et ensuite j'ai placé un while comme ça :

                        $req2 = mysql_query("SELECT nomProf, prenomProf FROM professeur WHERE codeProf = ANY(SELECT codeProf FROM enseigner WHERE nomInstrument = '".$res0[0]."');");   
                                        echo "<p>";
                                        while($res2 = mysql_fetch_array($req2))
                                        {
                                                echo $res2[1]." ".$res2[0].", ";
                                        }
                                        echo " enseignent cette discipline. <br>";
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs

                        afficher des données avec un SELECT

                        × 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