Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle sur SELECT

Sujet résolu
    15 janvier 2018 à 9:52:25

    Bonjour à tous,

    J'ai besoin de faire une boucle sur un SELECT et j'avoue ne pas savoir comment faire.

    Voici mon code :

    $reponse2 = $bdd->query('SELECT DISTINCT value
    										FROM (
    											SELECT DISTINCT JTI1_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI2_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI3_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI4_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI5_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI6_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI7_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI8_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI9_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    											UNION SELECT DISTINCT JTI10_exam AS value FROM fn_juges_exam WHERE modif_tech > 0
    										) AS derived order by value');
    



    J'ai ma variable $nbjuge qui donne le nombre de select distinct, ça peut aller de 1 à 10.

    Merci de me guider.

    Bonne journée.

    -
    Edité par Tee shot 15 janvier 2018 à 9:56:13

    • Partager sur Facebook
    • Partager sur Twitter
      15 janvier 2018 à 10:03:45

      Salut !

      Je ne suis pas sûr de mon coup mais, tu peux construire ta requête via une string dans un for puis exécuter ta query une fois fait ?

      Un exemple rapide (pas forcément juste, je n'ai pas testé !) :

      $rqst = 'SELECT DISTINCT value FROM (SELECT DISTINCT JTI1_exam AS value FROM fn_juges_exam WHERE modif_tech > 0';
      
      for(int $i = 0; $i < $ta_variable; $i++)
          $rqst .= ' UNION SELECT DISTINCT JTI' . $i+1 . '_exam AS value FROM fn_juges_exam WHERE modif_tech > 0';
      
      $query = $db->prepare($rqst);
      $query->execute();
      
      while($query->fetch())
          // traitement des résultats reçus



      -
      Edité par Algorun 15 janvier 2018 à 10:04:07

      • Partager sur Facebook
      • Partager sur Twitter
      Celui qui croit tout savoir ne sait rien
        15 janvier 2018 à 10:29:02

        Salut,

        Une question quand même est comment tu fais pour te retrouver avec des tables JTIX_exam (X de 1 à 10) ? 

        • Partager sur Facebook
        • Partager sur Twitter
        le bienfait n'est jamais perdu
          15 janvier 2018 à 11:56:51

          merci Algorun, je teste ça ce soir, (je suis en réunion tout l'après midi).

          @WillyKouassi je peux avoir 30 juges.

          10 JTI qui signifie Juge Technique Impression de 1 à 10. exam signifie en examem

          10 JTE  qui signifie Juge Technique Exécution de 1 à 10.

          10 JEL  qui signifie Juge Eléments de 1 à 10.

          Je dois analyser et comparer chaque note, donné pour chaque ballet ( 1 à 100).

          Merci

          -
          Edité par Tee shot 15 janvier 2018 à 12:14:43

          • Partager sur Facebook
          • Partager sur Twitter
            15 janvier 2018 à 22:28:05

            Oui même si tu peux avoir 30 Juges (qui ne sont que des personnes)  et les TI, TE ou Elements ce sont des critères de notation (si je ne me trompe pas). Tu ne vas pas dire le jour tu auras 100 juges , tu vas créer autant de tables. Juste pour dire que ta conception est mauvaise et si tu ne la changes pas tu risques d'avoir des requêtes ultra-compliquées pour pas grande choses
            • Partager sur Facebook
            • Partager sur Twitter
            le bienfait n'est jamais perdu
              16 janvier 2018 à 16:52:50

              la limite est de 10 juges par panel, je n'en ferais donc pas 100. Peut être que ma conception n'est pas bonne, j'ai 30 champs et pas 30 tables, et 100 lignes pour 100 ballets. Je ne suis pas un pro, j'apprends au fur et à mesure (ce n'est pas mon métier, je fais ça juste pour le plaisir d'y arriver), mais ça marche et c'est même encore plus compliqué que ça en réalité (il y en a qui donne une note, d'autres 5), sans parler des juges officiels et ceux en examens.

              Et là n'était pas la question, ça marche depuis maintenant 3 ans, j'essaie juste d'apporter des fonctions supplémentaires, tout marche, mais quand je regarde mon code je suis sur qu'il y a plus simple et plus propre, c'est pourquoi je cherche pour essayer de progresser, juste pour la plaisir d'y arriver.

              Sinon pour mon problème, j'ai fait appelle à un ami, qui a trouvé en quelques secondes (c'est son métier), je vous mets la solution qui marche parfaitement.

              function creer_requete_notes_juges($nombre_de_juge = 1) {
                 global $bdd;
                $chaine_requete = 'SELECT DISTINCT value FROM ( ';
                for($index = 1; $index <= $nombre_de_juge; $index++) {
                  if($index != 1) {
                    $chaine_requete .= 'UNION ';
                  }
                  $chaine_requete .= 'SELECT DISTINCT JTI'. $index .'_exam AS value FROM fn_juges_exam WHERE modif_tech > 0 ';
                }
              
                $chaine_requete .= ') AS derived order by value';
              
              	return $bdd->query($chaine_requete);
              
              }
              
              $requete = creer_requete_notes_juges($ecart_juges);


              J'ai par la même occasion appris à concatener proprement. Ce que je ne savais pas faire et je trouve ça puissant! ^^

              Merci pour votre aide et à Algorum, qui a proposé quelque chose de très proche da la solution retenue.

              -
              Edité par Tee shot 16 janvier 2018 à 17:01:03

              • Partager sur Facebook
              • Partager sur Twitter

              Boucle sur 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