IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Somme de données issues de BDD affichées en tableau


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut Somme de données issues de BDD affichées en tableau
    Bonjour à tous,

    J'affiche les données de ma BDD dans tableau via requête SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    while ($donnees = $reponse->fetch())
    {
    ?>
    	<tr>
    		<td> <?php echo $donnees['nomHotel']; ?> </td> 
    		<td> <?php echo $donnees['nbSGL21mars']; ?> </td>
    		<td> <?php echo $donnees['SGLreservees21mars']; ?> </td>
    		<td><?php echo $donnees['nbSGL21mars']-$donnees['SGLreservees21mars']; ?></td>
    	</tr>
     
     
    	<tr>
    		<td>TOTAL</td>
    		<td id="total_1"><?php echo $totalSGL21mars2 ?></td>
    		<td id="total_2"></td>
    		<td id="total_3"></td>
    	</tr>
    Je cherche à récupérer en cellules id total_1, total_2 et total_3 les totaux des variables récupérées dans les lignes du dessus via ma boucle.
    Existe-t-il une fonction toute simple que je pourrais insérer dans mes cellules total qui dirait un truc du genre, pour la cellule id total_1 par ex: "echo somme de toutes mes variables $donnees['nbSGL21mars']; " ?
    Pour l'instant je récupère mes sommes via SQL avec SUM (d'où le echo $totalSGL21mars2) mais j'ai énormément de colonnes donc c'est loin d'être optimal...

    Merci pour votre aide et vos idées

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    une autre approche c'est de récupérer tes données en bloc et de faire les totaux en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sums        = [];
    $keys_to_sum = ['nbSGL21mars', 'SGLreservees21mars'];
    array_walk_recursive($data, function($v, $k) use (&$sums, $keys_to_sum)
    {
        if (in_array($k, $keys_to_sum, true))
        {
            isset($sums[$k]) ? $sums[$k] += $v : $sums[$k] = $v;
        }
    });

  3. #3
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Hello rawsrc,

    1/ Merci
    2/ Oulaaaaaa, là c'est un peu compliqué pour moi ;-)
    Je vais prendre ce code que tu me donnes et jouer un peu avec pour voir si je comprends le truc. Y'a de fortes chances que je revienne t'embêter avec des questions

    @ plus tard donc

  4. #4
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Donc après avoir regardé l'histoire, je suis perdue à vrai dire.

    Si je comprends bien :
    La variable $keys_to_sum récupère les données nbSGL21mars et SGLreservees21mars de tous mes enregistrements dans un array,
    et la variable $sums récupère la somme de toutes ces données dans un array...
    Jusque là j'ai bon ?

    C'est la suite que je ne comprends pas... Comment utiliser ce code dans ma page et comment afficher les totaux obtenus dans mon tableau...

    Peux-tu m'aguiller ?
    Merci ;-)

  5. #5
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par E. Nigma Voir le message
    La variable $keys_to_sum récupère les données nbSGL21mars et SGLreservees21mars de tous mes enregistrements dans un array
    Non, du tout, $keys_to_sum ne fait que stocker la liste des clés pour lesquelles tu as besoin d'un total. Cela t'évite de faire des sommes de valeurs non numériques par exemple.

    Après, il faudrait que tu postes plus de code, histoire de voir la structure de ton tableau : les totaux sont-ils logés dans un <tfooter></tfooter> et/ou tu as aussi des totaux par lignes...

  6. #6
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Hello rawsrc,

    La structure de mon tableau est telle que je l'ai postée dans mon 1er message.
    Je souhaite récupérer les totaux en bas de chaque colonne. Pas de totaux en ligne.
    Ma ligne de totaux n'est pas dans un <tfooter> mais je peux l'y mettre si ça doit aider.

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    je vois un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    $data        = $reponse->fetchAll();
    $sums        = [];
    $keys_to_sum = ['nbSGL21mars', 'SGLreservees21mars'];
    $hsc         = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };
     
    array_walk_recursive($data, function($v, $k) use (&$sums, $keys_to_sum)
    {
        if (in_array($k, $keys_to_sum, true))
        {
            isset($sums[$k]) ? $sums[$k] += $v : $sums[$k] = $v;
        }
    });
     
    $tbody = '<tbody>';
    foreach ($data as $k => $v)
    {
        $tbody .= <<<html
    <tr>
        <td>{$hsc($v['nomHotel'])}</td>
        <td>{$hsc($v['nbSGL21mars'])}</td>
        <td>{$hsc($v['SGLreservees21mars'])}</td>
        <td>{$hsc($v['nbSGL21mars'] - $v['SGLreservees21mars'])}</td>
    </tr>
    html;
    }
     
    $tbody .= '</tbody>';
    $tfoot  = <<<html
    <tfoot>
        <tr>
            <td>TOTAUX</td>
            <td id="total_1">{$hsc($sums['nbSGL21mars'])}</td>
            <td id="total_2">{$hsc($sums['SGLreservees21mars'])}</td>
            <td id="total_3">{$hsc($sums['nbSGL21mars'] - $sums['SGLreservees21mars'])}</td>
        </tr>
    </tfoot>
    html;
     
    echo $tbody, $tfoot;

  8. #8
    Membre du Club
    Femme Profil pro
    Webdesigner
    Inscrit en
    Avril 2014
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Avril 2014
    Messages : 92
    Points : 53
    Points
    53
    Par défaut
    Merci rawsrc !
    Je vais bosser là-dessus.
    Bonne soirée ++

Discussions similaires

  1. [SQL] Gérer au mieux les formats pour des données issues de BDD SQL
    Par Keisham dans le forum SAS Base
    Réponses: 2
    Dernier message: 03/11/2015, 08h52
  2. Réponses: 1
    Dernier message: 10/03/2014, 12h02
  3. [MySQL] Afficher un tableau issue d'une BDD à l'aide d'un template
    Par Eonix dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/06/2007, 17h45
  4. [MySQL] Remplir un array() avec des données issues d'une bdd
    Par fichtre! dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/12/2006, 17h03
  5. [Conception] Afficher les données (BDD) dans un tableau en PHP
    Par ox@na dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/09/2006, 15h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo