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


maxslayer44
Réponse acceptée

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;
}
?>

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_];
}

?>

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);