Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'addition des valeurs dans ma table

    13 janvier 2019 à 14:43:44

    Bonjour, 

    Si quelqu'un pourrait m'aider ... J'ai essayé un code, sans succès.  
    Je contient  dans ma colonne 'valide' en int, des nombres au dessus de 0.  
    Je fais la liaison entre "id" qui est connecté (qu'on trouve dans la table 'membres') et  "id_destinataire1" qui doit correspondre au même que "id". 
    Maintenant, je select tout les nombre situés dans "valide" (dans ma table messages) et je les additionne.  
    Ensuite je les affiche avec 

    <?php echo $totaltokens['valide']; ?>
    

    Mon code :  

    <?php 
    if(isset($_SESSION['id']) AND $_SESSION['id'] > 0)
    {
        $getid = intval($_SESSION['id']);
        $requser = $bdd->prepare('SELECT * FROM membres WHERE id = ?');
        $requser->execute(array($getid));
        $userinfo = $requser ->fetch();
    $reqtokens = $bdd->prepare('SELECT * FROM messages WHERE id_destinataire1 = ?');
    $reqtokens->execute([$userinfo['id']]);
    $totaltokens = $reqtokens->fetch();
    $reqtokensvalide = $bdd->prepare('SELECT * FROM messages WHERE valide = ?');
    $reqtokensvalide->execute([$userinfo['id']]);
    $totaltokensvalide = $reqtokensvalide->rowCount();
    ?>


    Problème / ! \ 
    Ca affiche bien un nombre qui est contenu dans "valide", mais aucune addition n'est faite.  
    Parfois, j'ai la valeur 30, 40,20... dans ma colonne "valide" mais il m'affiche une seul valeur parmi les trois. Alors que je souhaite les additionner entre elles.  

    Merci de votre aide, 
    cordialement

    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2019 à 15:57:06

      Salut,

      PDOStatement::rowCount — Retourne le nombre de lignes affectées par le dernier appel à la fonction.

      Si tu veux additionner toutes les valeurs de valide tu dois faire un select sum(valide).

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui aime à apprendre est bien près du savoir " Confucius

        13 janvier 2019 à 18:11:19

        Re, 

        J'ai fait des recherches pour le Select Sum, je l'ai placé à la place de 

        SELECT * FROM messages WHERE valide = ?

        Et rien n'a changé 

        J'ai rajouté une valeur dans ma colonne (15) et plus rien ne s'afficher, je pense que c'est la req qui ne savait plus quoi afficher :p 

        J'ai pas supprimé le rowcount, je pense qu'il ne fallait pas ? Si ?

        J'ai également essayé de modifier l'affichage de 'valide' par 

        <?php echo $totaltokensvalide['valide']; ?>

        En essayant donc d'afficher la variable $totaltokensvalide et pas $totaltokens

        Rien ne marche encore. 

        Merci pour ton aide

        • Partager sur Facebook
        • Partager sur Twitter
          14 janvier 2019 à 20:39:03

          Salut,

          Peux-tu faire un print_r de $totaltokensvalide = $reqtokensvalide->fetchAll()? Puis me dire ce que tu veux additionner?

          A plus

          EDIT: Essaie aussi:

          $reqtokensvalide = $bdd->prepare('SELECT SUM(valide) FROM messages WHERE valide = ?');
          $reqtokensvalide->execute([$userinfo['id']]);
          $totaltokensvalide = $reqtokensvalide->fetch();
          
          print_r($totaltokensvalide);



          -
          Edité par stoads 14 janvier 2019 à 20:47:49

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui aime à apprendre est bien près du savoir " Confucius

            14 janvier 2019 à 21:57:29

            Salut, 

            Merci pour ton aide, alors avec le print_r cela m'affiche

            Array ( [SUM(valide)] => [0] => )
            

            Je pense que ça veut dire qu'il n'y a rien dans la colonne 'valide' ? Si c'est cela, alors je ne comprends pas, car des données sont bien contenus dans la colonne 'valide' et la table 'messages'.

            Cordialement

            EDIT : 

            Je ne sais pas, mais les requetes que j'ai fait ne sont pas reliée, ce n'est pas grave normalement ? Mais peut être y'a t-il un impact sur le résultat ?

            -
            Edité par CoDurDur 14 janvier 2019 à 22:02:34

            • Partager sur Facebook
            • Partager sur Twitter
              14 janvier 2019 à 22:09:19

              Bonjour,

              Il y a déjà un roblème dans ta façon de faire, normalement tu devrais faire ça en une seule requête. Connais-tu les jointures ?

              Ensuite pour afficher le résultat d'un SUM() il faut un alias, par exemple (voir doc) :

              SELECT facture_id, SUM(prix) AS prix_total
              FROM facture

              -
              Edité par philodick 14 janvier 2019 à 22:09:43

              • Partager sur Facebook
              • Partager sur Twitter
                17 janvier 2019 à 20:30:01

                Salut, 

                D'abord, désolé pour cette réponse tardive, j'ai beaucoup de travail. 

                Je ne connais absolument pas les jointure. 

                Et le code que tu me montres, il me semble que c'est du PDO ? Comment le traduit t-on en php ?

                Cordialement

                • Partager sur Facebook
                • Partager sur Twitter
                  20 janvier 2019 à 11:54:05

                  Salut,

                  oui méa-coulpa j'avais oublié l'alias ;-)

                  En gros une jointure te permet de joindre comme son nom l'indique plusieurs tables (ex: table_a & table_b) <, pour cela il faut donc une relation entre tes tables (ici membres id est je suppose identique à messages id_destinataire1) et te permet donc de filtrer sur les deux tables ou de récupérer une ou plusieurs colonnes. Mon explication est très succinte je l'avoue. Mais de la doc tu trouveras!

                  Pour ton cas cela donnerai quelque chose comme cela:

                  select sum(valide) as somme from messages as m inner join membres as u on u.id = m.id_destinataire1 where u.id = ?

                    Ce que je ne comprends toujours pas c'est que dans tes requête tu dis que valide = userInfo[id] donc à ton id de ton utilisateur? Pourquoi donc deux jointures valide et id_destinataire1? Sans avoir le détail de tes tables quand je lis je m'attend a trouver un boolean dans valide. Je compte donc sur toi pour nous donner plus d'explication afin de t'aider dans ta requête.

                  PS: désolé aussi pour la reponse tardive mais j'ai aussi bcp de travail.

                  Tiens nous au courant.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Celui qui aime à apprendre est bien près du savoir " Confucius

                  Problème d'addition des valeurs dans ma table

                  × 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