Addition Boucle While PDO

Par Cobryn, il y a 10 ans


Bonjour,

Je vous expose mon problème, j'ai dans ma base de donné ceci:

https://gyazo.com/da54263c0c013fa079f5271a02a895d0

Je souhaiterais additionner les valeurs de bankacc, du style (en reprenant l'exemple):

1351512163 + 258 = 1351512421

Voici mon code actuel:

<?php $req_selectBank = $connexion->query('SELECT * FROM players'); $nbr_selectBank = $req_selectBank->rowCount(); if($nbr_selectBank > 0) { while($selectBank = $req_selectBank->fetch()) { echo $selectBank['bankacc']; } } ?>

Mais cela me retourne les chiffres de chacun a la suite comme ceci: 1351512163258

Comment faire ? Merci d'avance

Enfaite je réexplique je veut que les valeurs s'additionne et non pas se mettre a coté, genre si dans la db j'ai 1 et 1 je veut que le resultat soit 2 et non 11

3 réponses

ToToSe, il y a 10 ans

Yop!
Tu peu faire la somme des bankacc directement dans ta requette SQL ;)

<?php $req_selectBank = $connexion->query('SELECT *, SUM(bankacc) somme FROM players'); $banks = $req_selectBank->fetchAll(PDO::FETCH_ASSOC); // $banks[0]['somme'] = > Somme de tout les bankacc pour naviguer dans ton tableau de donnée : foreach($banks as $value) { echo $banks[_column_]; } ?>
maxslayer44, il y a 10 ans

Bonjour,

Une autre solution (moins optimale que celle de ToToSe) qui reprend la boucle while :

<?php $req_selectBank = $connexion->query('SELECT * FROM players'); $nbr_selectBank = $req_selectBank->rowCount(); if($nbr_selectBank > 0) { $somme = 0; // On défini ici un accumulateur avec lequel on peut faire nos additions while($selectBank = $req_selectBank->fetch()) { $somme+= $selectBank['bankacc']; // Par ex, au premier tout, il contient 0 + 1351512163 , au second 1351512163 + 258, et ainsi de suite selon tes champs en base } echo $somme; } ?>
Ramzz1994, il y a 10 ans

Je pense que la réponse de sudovim et la meilleure. Avant de voir sa réponse, je pensais à une fonction qu'on pourrait réutiliser.

Je trouverais ça cool un truc du genre :

function sum(array $array, Callable $lambda) { $sum = 0; foreach ($array as $element) { $sum += $lambda($element); } return $sum; } $req_selectBank = $connexion->query('SELECT * FROM players'); $banksTableau = $req_selectBank->fetchAll(PDO::FETCH_ASSOC); $sommeTableau = sum($banks, function ($bank) { return $bank['bankacc']; }); $banksObjet = $req_selectBank->fetchAll(PDO::FETCH_OBJ); $sommeObjet = sum($banksObj, function ($bank) { return $bank->bankacc; }); // Je vous laisse deviner les autres possibilités. :-) // Si on ajouterait une couche à PDO ou MySQLi... $somme = $mesBanks->sum(function ($bank) { return $bank->bankacc; });

Syntaxiquement, c'est pas super en PHP, mais Java et C# ont adoptés une syntaxe plutôt intéressente.

int sommeDesElements = monTableau.sum(element => element.ElementÀCompter);