Partage
  • Partager sur Facebook
  • Partager sur Twitter

Affichage de moyenne

Sujet résolu
    10 décembre 2018 à 15:22:24

    Bonjour,

    Je souhaite calculer puis afficher la moyenne de la colonne Note présente dans la table ma_table.

    Mon code est le suivant:

    include "connexion.php";
    $sql= "SELECT AVG(Note) AS moyenne FROM ma_table WHERE Id = '2018' "; $req = $connexion->query($sql); echo $req['moyenne'];


    L'erreur "Cannot use object of type PDOStatement as array in... on line XX". La ligne XX correspond à mon echo.

    Je suis sûr que c'est solvable facilement mais je tourne en rond.

    Merci d'avance pour vos propositions.

    • Partager sur Facebook
    • Partager sur Twitter
      10 décembre 2018 à 15:26:29

      Salut,

      l'erreur explique bien, si tu vas sur la doc PHP de PDOStatement tu auras des exemples en réponse .

      • Partager sur Facebook
      • Partager sur Twitter
        10 décembre 2018 à 15:36:54

        Bonjour Christouphe et merci pour ton intervention.

        Il y a 73 occurrences de PDOStatement dans la doc donc difficile pour moi de comprendre où chercher.

        • Partager sur Facebook
        • Partager sur Twitter
          10 décembre 2018 à 15:47:54

          lis la doc stp et parmis les 73 occurence, une seule est présente à la ligne XXX (développer c'est aussi être curieux)

          -
          Edité par christouphe 10 décembre 2018 à 15:48:52

          • Partager sur Facebook
          • Partager sur Twitter
            10 décembre 2018 à 17:06:55

            Je regrette mais ne vois pas ce qu'il faut chercher exactement donc, forcément, je ne trouve pas.
            • Partager sur Facebook
            • Partager sur Twitter
              10 décembre 2018 à 17:22:06

              Si tu compares ton code à celui d'un tuto, ne vois-tu pas qu'il manque quelque chose/une étape ?

              • Partager sur Facebook
              • Partager sur Twitter
                10 décembre 2018 à 17:37:12

                Sans doute que si mais je ne vois pas où se trouve le tuto dans ce document. Je ne suis pas bon, je sais.
                • Partager sur Facebook
                • Partager sur Twitter
                  10 décembre 2018 à 19:18:26

                  être bon ou pas n'est pas la question, es-tu allé voir la doc citée ? As-tu cherché, as-tu lu les exemples simples donnés il te manque une étape (le fetch) et c'es expliqué dans les exemples de la doc.

                  DOnc va lire, fait au moins un minimum d'effort

                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 décembre 2018 à 8:18:28

                    christouphe a écrit:

                    être bon ou pas n'est pas la question, es-tu allé voir la doc citée ? As-tu cherché, as-tu lu les exemples simples donnés il te manque une étape (le fetch) et c'es expliqué dans les exemples de la doc.

                    DOnc va lire, fait au moins un minimum d'effort


                    Christouphe,

                    J'ai lu les 32 pages de http://php.net/manual/fr/book.pdo.php et je ne vois pas !

                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 décembre 2018 à 15:00:28

                      Christouphe,

                      L'exemple 1 est le suivant:

                      <?php
                      function getFruit($conn) {
                          $sql =  'SELECT name, color, calories FROM fruit ORDER BY name';
                          foreach  ($conn->query($sql) as $row) {
                              print $row['name'] . "\t";
                              print  $row['color'] . "\t";
                              print $row['calories'] . "\n";
                        }
                      }
                      ?>

                      Je cherche à afficher une moyenne (AVG) et julp me dit qu'il manque un FETCH mais je persiste à ne voir ni l'un ni l'autre ici. ;-(

                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 décembre 2018 à 15:21:54

                        Et personne ne t'a appris à adapter les exemple à ton code ???

                        <?php
                        include "connexion.php";
                        $sql= "SELECT AVG(Note) AS moyenne FROM ma_table WHERE Id = '2018'";
                            foreach ($connexion->query($sql) AS $row) {
                                echo $row['moyenne']
                            }
                        
                        
                        



                        -
                        Edité par christouphe 11 décembre 2018 à 15:24:04

                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 décembre 2018 à 15:59:32

                          Bonjour Christouphe,

                          christouphe a écrit:

                          Et personne ne t'a appris à adapter les exemple à ton code ???

                          Si, bien entendu mais je cherchais l'instruction FETCH dont julp avait parlé et je ne risquais pas de la trouver.

                          Merci pour ton aide.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            11 décembre 2018 à 16:45:59

                            Mouais ...

                            D'une foreach ($statement as $row) est strictement équivalent à while ($row = $statement-&gt;fetch()).

                            De deux, une fonction d'agrégation (AVG en est une), sans clause GROUP BY, ne renvoie qu'une ligne donc une boucle est totalement inutile.

                            Tu n'es quand même pas développeur de métier ?

                            Ton code de départ :

                            $req = $connexion-&gt;query($sql);
                            echo $req['moyenne'];
                            

                            On ne va pas tourner autour du pot 107 ans, tout ce que tu avais à faire c'est insérer le PDOStatement::fetch entre (et changer le nom de la variable à moins de l'écraser) :

                            $req = $connexion-&gt;query($sql);
                            $row = $req-&gt;fetch();
                            echo $row['moyenne'];
                            

                            Ou, ici, carrément utiliser PDOStatement::fetchColunm pour directement récupérer le résultat sans un tableau intermédiaire :

                            $req = $connexion-&gt;query($sql);
                            echo $req-&gt;fetchColumn();
                            

                            PDO n'est pas si différent de mysql ou mysqli : on ne peut pas directement accéder au résultat d'une requête comme tu cherchais à le faire. On exécute la requête qui renvoie un résultat intermédiaire qui n'est pas directement exploitable et à partir de ce dernier on lit une ligne à la fois via les fonctions de fetch (les méthodes PDOStatement::fetch* pour PDO ; les fonctions mysql(i)_fetch_* pour mysql(i))

                            PS : les &gt; sont des > toujours ce forum buggué qui ne sera sans doute jamais corrigé

                            -
                            Edité par julp 11 décembre 2018 à 16:57:28

                            • Partager sur Facebook
                            • Partager sur Twitter
                              11 décembre 2018 à 17:20:25

                              Bonsoir,

                              julp a écrit:

                              Tu n'es quand même pas développeur de métier ?


                              Non, non, absolument pas. Je tente de maintenir à flot un site que j'ai créé et administre de façon purement bénévole et désintéressée. Mon métier n'a rien à voir avec ça.

                              Mais je crois qu'on va s’arrêter là car je sens de l'énervement dans l'air alors que l'objectif n'était pas d'embêter qui que ce soit mais de tenter, à mon petit niveau, de progresser un petit peu sans trop me prendre la tête.

                              Je remercie tout le monde de vos efforts.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 décembre 2018 à 20:15:57

                                Non, pas d'énervement ^^ on est juste comme ça tout le temps :p (surtout julp ( :ninja:je sors)
                                • Partager sur Facebook
                                • Partager sur Twitter

                                Affichage de moyenne

                                × 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