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

CodeIgniter PHP Discussion :

Faire des sous-totaux dans une table


Sujet :

CodeIgniter PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut Faire des sous-totaux dans une table
    Bonjour,
    Sur un site développé en PHP (CodeIgniter) de entes en ligne de menus il y a un tableau répertoriant toutes les commandes passées par le client.
    Le client peut commander un menu complet (plat + boisson + dessert) et ajouter des extras.
    Le tableau affiche une ligne par item
    date - boisson - 0€ (puisque faisant partie du menu)
    date - dessert - 0€ (idem)
    date - plat - prix du menu
    date - supplément - prix du supplément

    Je souhaite ajouter une ligne récapitulative pour chaque date avec le montant total payé. Il faudrait donc qu'il calcule le total des lignes précédentes ayant la même date et qu'il affiche
    date - rien - prix total payé
    Je n'y arrive pas, alors si quelqu'un pouvait me donner un coup de pouce, je lui serais très reconnaissante
    Voici le code actuel
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     <table class="table table-bordered">
                                  <tr>
                                      <th>Id</th>
                                      <th><?php echo $this->lang->line('Productname') ; ?></th>
                                      <th><?php echo $this->lang->line('Orderdate') ; ?></th>
                                      <th><?php echo $this->lang->line('Quantity') ; ?></th>
                                      <th><?php echo $this->lang->line('Price') ; ?></th>
                                      <th>Total</th>
                                  </tr>
                                  <?php
                                    $i=1;
    								$total=0;
                                    $uid=$this->session->userdata('uid');
                                    //$join = array('indochine_products_options', 'indochine_products_options.product_option_id=orderCreatetime.options');
     
                                    /*$query="SELECT * FROM indochine_order io left join indochine_products_options ipo on o. WHERE user_id = ". $userid ." AND DATE_FORMAT(order_date, \"%Y-%m-%d\") = '" . date("Y-m-d") . "' AND id_commande = 0";
                                    $allorder = $this->db->query($query)->row();*/
     
                                    $this->db->join('indochine_products_options','indochine_products_options.product_option_id=indochine_order.options');
                                    $allorder=$this->db->order_by('orderCreatetime', 'DESC')->get_where('indochine_order' , array('user_id' => $uid))->result_array();
                                   foreach($allorder as $key => $value){ ?>
                                  	  <tr>
                                      <td style="font-size: 18px;"> - </td>
                                      <td style="font-size: 18px;"> - </td>
                                      <td style="font-size: 18px;"><?=$value['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"><?=($total['product_option_price'] + $value['product_option_extra']);?>&euro;</td>
                                        <td style="font-size: 18px;"><?=$value['product_option_price'] + $value['product_option_extra'];?>&euro;</td>
     
     
                                <?php }?>
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
                                  </tr>
     
    							  <tr>
                                      <td style="font-size: 18px;"><?=$i++;?></td>
                                      <td style="font-size: 18px;"><?=$value['proname'];?></td>
                                      <td style="font-size: 18px;"><?=$value['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"><?=$value['qnty'];?></td>
                                      <?php if ( ($value['product_option_price'] + $value['product_option_extra']) > 0 ) { ?>
                                        <td style="font-size: 18px;"><?=($value['product_option_price'] + $value['product_option_extra'])/$value['qnty'];?>&euro;</td>
                                        <td style="font-size: 18px;"><?=$value['product_option_price'] + $value['product_option_extra'];?>&euro;</td>
                                <?php }else{?> 
                                        <td> - </td>
                                        <td> - </td>
                                <?php }?>
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
                                  </tr>
                                  <?php } ?>
                                </table>
    Et serait-ce possible que seules les lignes total soient visibles, les autres seulement quand on clique sur la ligne du total ?

    merci d'avance !!!

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bonjour !
    c'est order_date ou Orderdate ?
    que donne cette requête dans ton PHPmyadmin ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Productname, Orderdate, Quantity, Price
    FROM indochine_order io 
    left join indochine_products_options ipo on ipo.product_option_id=io.options
    WHERE user_id = 15 AND DATE_FORMAT(Orderdate, "%Y-%m-%d") = curdate() AND id_commande = 0;
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    merci pour ta réponse. Peux pas te dire pourquoi ce n'est pas moi qui ai créé le bazar !

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    ca devient grave ! n'ai-je pas lu tout à l'heure que tu demandais pourquoi c'était un orderdate et non un datetime ?? ce à quoi s'adressait ma réponse.
    je vais tester ça dans la bdd et te tiens au courant
    merci !!

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Bon, ça me dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Erreur
    Analyse statique :
     
    1 erreurs trouvées lors de l'analyse.
     
    Mot clé non reconnu. (near "io" at position 69)
    Requête SQL :  Documentation
     
    SELECT Productname, Orderdate, Quantity, Price FROM indochine_order io left join indochine_products_options ipo on ipo.product_option_id=io.options WHERE user_id = 15 AND DATE_FORMAT(Orderdate, "%Y-%m-%d") = curdate() AND id_commande = 0
     
    MySQL a répondu : Documentation
     
    #1054 - Unknown column 'Productname' in 'field list'

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Dans la table il y a un champ orderCreatetime et un champ order_date . Par contre je vois qu'il y a un champ id_commande. Chaque ligne d'item de menu a le même id_commande. Ca peut servir ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Bonjour,
    j'ai testé différentes choses et ma dernière tentative est déjà un peu plus concluante dans le sens que je n'ai pas d'erreur quand j'affiche le tableau. mais cela ajoute une ligne TOTAL sous chaque item et à chaque fois cela ajoute le contenu de la ligne précédente au lieu de faire le total de toutes les lignes d'une même date.
    Donc après avoir initialisé $total=1;
    j'ai ajouté dans le foreach une nouvelle ligne après la précédente ce qui donne ceci
    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
    40
    41
    42
    <?php
                                    $i=1;
    				$total=0;
     
                                    $uid=$this->session->userdata('uid');
                                    //$join = array('indochine_products_options', 'indochine_products_options.product_option_id=orderCreatetime.options');
     
                                    /*$query="SELECT * FROM indochine_order io left join indochine_products_options ipo on o. WHERE user_id = ". $userid ." AND DATE_FORMAT(order_date, \"%Y-%m-%d\") = '" . date("Y-m-d") . "' AND id_commande = 0";
                                    $allorder = $this->db->query($query)->row();*/
     
                                    $this->db->join('indochine_products_options','indochine_products_options.product_option_id=indochine_order.options');
                                    $allorder=$this->db->order_by('orderCreatetime', 'DESC')->get_where('indochine_order' , array('user_id' => $uid))->result_array();
                                   foreach($allorder as $key => $value){ ?>
     
    							  <tr>
                                      <td style="font-size: 18px;"><?=$i++;?></td>
                                      <td style="font-size: 18px;"><?=$value['proname'];?></td>
                                      <td style="font-size: 18px;"><?=$value['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"><?=$value['qnty'];?></td>
                                      <?php if ( ($value['product_option_price'] + $value['product_option_extra']) > 0 ) { ?>
                                        <td style="font-size: 18px;"><?=($value['product_option_price'] + $value['product_option_extra'])/$value['qnty'];?>&euro;</td>
                                        <td style="font-size: 18px;"><?=$value['product_option_price'] + $value['product_option_extra'];?>&euro;</td>
                                <?php }else{?> 
                                        <td> - </td>
                                        <td> - </td>
                                <?php }?>
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
    								  <!--ligne sous-total -->
                                  </tr>
    							   <tr>
                                      <td style="font-size: 18px;"></td>
                                      <td style="font-size: 18px;"> - </td>
                                      <td style="font-size: 18px;"><?=$value['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"></td>
    								  <td style="font-size: 18px;">Total</td>
                                      <td style="font-size: 18px;"><?=$total+=$value['product_option_price'] + $value['product_option_extra'];?>&euro;</td>
     
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
                                  </tr>
                                  <?php } ?>
    Cela donne une ligne produit puis une ligne total et non toutes les lignes produits d'une date de commande puis une ligne avec le total du montant indiqué dans la dernière colonne de chacune de ces lignes. Est-il possible par exemple de récupérer la valeur de la dernière colonne de chaque item dans une variable puis dans la ligne TOTAL faire le total de ces variables ? Désolée si c'est une b

    A ceci, je souhaite rajouter une modification du format de date. Actuellement c'est la date et l'heure, je souhaite n'afficher que la date (que j'aimerais voir au format d-m-Y et sans l'heure).
    par ailleurs, la première colonne indique l'id de la commande de l'item. j'ai essayé en remplaçant par id_commande qui est dans la table. Ca marche mais je me suis rendue compte qu'il y avait une id_commande = 0. Je suppose que c'est un mauvais paramètre du champ. Que faudrait-il faire pour que cela commence à 1 (après vidage de la table) ?

    Merci d'avance

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Essaie ça, sans double boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     foreach($allorder as $row){ ?>
        <tr>
          <td style="font-size: 18px;"><?=$i++;?></td>
          <td style="font-size: 18px;"><?=$row['proname'];?></td>
          <td style="font-size: 18px;"><?=$row['orderCreatetime'];?></td>
          <td style="font-size: 18px;"><?=$row['qnty'];?></td>
       <tr>
    <?php}?>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Merci Dendrite,
    J'ai testé, cela m'affiche une ligne avec l'id du produit commandé dans la première colonne, les autres sont vides, puis une ligne avec TOTAL et un montant à 0€ :-(

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Toutes mes excuses Dendrite, je ne devais pas être bien réveillée et je n'avais pas vu que tu avais remplace $value par $row dans les td. J'ai fait différents essais mais du coup erreur 500 sur la page.
    voici une de mes tentatives... j'ai remplacé le contenu de la colonne du prix unitaire par -, supprimé la sous-boucle qui disait que si le prix était à 0 il fallait afficher un - et modifié la dernière colonne en remplaçant les $value par $row => erreur 500. Il y a certainement un truc que j'ai mal fait !

    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
      foreach($allorder as $row){ ?>
     
    							  <tr>
                                      <td style="font-size: 18px;"><?=$i++;?></td>
                                      <td style="font-size: 18px;"><?=$row['proname'];?></td>
                                      <td style="font-size: 18px;"><?=$row['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"><?=$row['qnty'];?></td>
                                                                          <td style="font-size: 18px;">-</td>
                                        <td style="font-size: 18px;"><?=$row['product_option_price'] + $row['product_option_extra'];?>&euro;</td>
     
                                <?php }?>
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
    								  <!--ligne sous-total -->
                                  </tr>
    							   <tr>
                                      <td style="font-size: 18px;"></td>
                                      <td style="font-size: 18px;"> - </td>
                                      <td style="font-size: 18px;"><?=$row['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"></td>
    								  <td style="font-size: 18px;">Total</td>
                                      <td style="font-size: 18px;"><?=$total+=$row['product_option_price'] + $row['product_option_extra'];?>&euro;</td>
     
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
                                  </tr>

  11. #11
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Qu'est ce qui s'affiche quand tu testes ç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
    <?php
    echo '<pre>';
    print_r($allorder);
    echo '</pre>';
    break;
     
    foreach($allorder as $row){ ?>
     
    							  <tr>
                                      <td style="font-size: 18px;"><?=$i++;?></td>
                                      <td style="font-size: 18px;"><?=$row['proname'];?></td>
                                      <td style="font-size: 18px;"><?=$row['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"><?=$row['qnty'];?></td>
                                                                          <td style="font-size: 18px;">-</td>
                                        <td style="font-size: 18px;"><?=$row['product_option_price'] + $row['product_option_extra'];?>&euro;</td>
     
                                <?php }?>
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
    								  <!--ligne sous-total -->
                                  </tr>
    							   <tr>
                                      <td style="font-size: 18px;"></td>
                                      <td style="font-size: 18px;"> - </td>
                                      <td style="font-size: 18px;"><?=$row['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"></td>
    								  <td style="font-size: 18px;">Total</td>
                                      <td style="font-size: 18px;"><?=$total+=$row['product_option_price'] + $row['product_option_extra'];?>&euro;</td>
     
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
                                  </tr>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  12. #12
    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,

    Essaie voir avec ç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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?php
     
    $this->db->join('indochine_products_options','indochine_products_options.product_option_id=indochine_order.options');
    $uid       = $this->session->userdata('uid');
    $all_order = $this->db->order_by('orderCreatetime', 'DESC')->get_where('indochine_order' , array('user_id' => $uid))->result_array();
     
    // génération des lignes de détail du tableau
    $rows = [];
    $i    = 0;
    $sum  = 0;
    $date = reset($all_order)['orderCreatetime'];
     
    foreach ($all_order as $k => $v) {
        $total = $v['qnty'] * ($v['product_option_price'] + $v['product_option_extra']);
     
        if ($date === $v['orderCreatetime']) {
            ++$i;
            // ligne produit
            $rows[] = <<<html
    <td style="font-size: 18px;">{$i}</td>
    <td style="font-size: 18px;">{$v['proname']}</td>
    <td style="font-size: 18px;">{$v['orderCreatetime']}</td>
    <td style="font-size: 18px;">{$v['qnty']}</td>
    <td style="font-size: 18px;">{$total}</td>
    html;
        } else {
            // ligne total
            $rows[] = <<<html
    <td style="font-size: 18px;" colspan="4">Total</td>
    <td style="font-size: 18px;">{$sum}</td>
    html;
            $date = $v['orderCreatetime'];
            $sum  = 0;
        }
     
        $sum += $total;
    }
    ?>
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>Id</th>
                <th><?= $this->lang->line('Productname') ?></th>
                <th><?= $this->lang->line('Orderdate') ?></th>
                <th><?= $this->lang->line('Quantity') ?></th>
                <th><?= $this->lang->line('Price') ?></th>
                <th>Total</th>
            </tr>
        </thead>
        <tbody>
            <tr><?= implode('</tr><tr>', $rows) ?></tr>
        </tbody>
    </table>

  13. #13
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    @Dendrite, ai-je bien recopié le code ? Car cela donne une erreur 500
    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
    40
    41
    42
    <table class="table table-bordered">
                                  <tr>
                                      <th>Id</th>
                                      <th><?php echo $this->lang->line('Productname') ; ?></th>
                                      <th><?php echo $this->lang->line('Orderdate') ; ?></th>
                                      <th><?php echo $this->lang->line('Quantity') ; ?></th>
                                      <th><?php echo $this->lang->line('Price') ; ?></th>
                                      <th>Total</th>
                                  </tr>
                                 <?php
    echo '<pre>';
    print_r($allorder);
    echo '</pre>';
    break;
     
    foreach($allorder as $row){ ?>
     
    							  <tr>
                                      <td style="font-size: 18px;"><?=$i++;?></td>
                                      <td style="font-size: 18px;"><?=$row['proname'];?></td>
                                      <td style="font-size: 18px;"><?=$row['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"><?=$row['qnty'];?></td>
                                                                          <td style="font-size: 18px;">-</td>
                                        <td style="font-size: 18px;"><?=$row['product_option_price'] + $row['product_option_extra'];?>&euro;</td>
     
                                <?php }?>
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
    								  <!--ligne sous-total -->
                                  </tr>
    							   <tr>
                                      <td style="font-size: 18px;"></td>
                                      <td style="font-size: 18px;"> - </td>
                                      <td style="font-size: 18px;"><?=$row['orderCreatetime'];?></td>
                                      <td style="font-size: 18px;"></td>
    								  <td style="font-size: 18px;">Total</td>
                                      <td style="font-size: 18px;"><?=$total+=$row['product_option_price'] + $row['product_option_extra'];?>&euro;</td>
     
     
                                      <!-- <td><a href=""><i class="glyphicon glyphicon-remove" style="color:#f00"></i></a></td> -->
                                  </tr>
                                </table>

  14. #14
    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
    Oups, il semblerait que j'ai oublié un bout de code

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
     
    $this->db->join('indochine_products_options','indochine_products_options.product_option_id=indochine_order.options');
    $uid       = $this->session->userdata('uid');
    $all_order = $this->db->order_by('orderCreatetime', 'DESC')->get_where('indochine_order' , array('user_id' => $uid))->result_array();
     
    // génération des lignes de détail du tableau
    $rows = [];
    $i    = 0;
    $sum  = 0;
    $date = reset($all_order)['orderCreatetime'];
     
    foreach ($all_order as $k => $v) {
        if ($date !== $v['orderCreatetime']) {
            // ligne total
            $rows[] = <<<html
    <td style="font-size: 18px;" colspan="4">Total</td>
    <td style="font-size: 18px;">{$sum} &euro;</td>
    html;
            $date = $v['orderCreatetime'];
            $sum  = 0;
        }
     
        // ligne produit
        ++$i;
        $total  = $v['qnty'] * ($v['product_option_price'] + $v['product_option_extra']);
        $sum   += $total;
        $rows[] = <<<html
    <td style="font-size: 18px;">{$i}</td>
    <td style="font-size: 18px;">{$v['proname']}</td>
    <td style="font-size: 18px;">{$v['orderCreatetime']}</td>
    <td style="font-size: 18px;">{$v['qnty']}</td>
    <td style="font-size: 18px;">{$total} &euro;</td>
    html;
    }
    // ligne total 
    $rows[] = <<<html
    <td style="font-size: 18px;" colspan="4">Total</td>
    <td style="font-size: 18px;">{$sum} &euro;</td>
    html;
    ?>
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>Id</th>
                <th><?= $this->lang->line('Productname') ?></th>
                <th><?= $this->lang->line('Orderdate') ?></th>
                <th><?= $this->lang->line('Quantity') ?></th>
                <th><?= $this->lang->line('Price') ?></th>
                <th>Total</th>
            </tr>
        </thead>
        <tbody>
            <tr><?= implode('</tr><tr>', $rows) ?></tr>
        </tbody>
    </table>

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    @rawsrc merci d'être venu apporter ta contribution !
    Avec ton code il m'affiche une ligne item (celle avec id = 1) puis toutes des lignes total, puis la ligne de l'item avec id=2, puis toute une tripotée de lignes total.

    Dans la bdd, la table indochine_order contient les champs suivants :
    id
    user_id
    options
    proname (nom du produit)
    price
    qnty
    orderCreatetime
    ...
    id_commande

    ne serait-il pas possible de faire une somme de tous les (price) pour une (x) id_commande ?

  16. #16
    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
    j'ai modifié mon code

    précise un truc c'est le total par id_commande qui t'intéresse ou par (orderCreatetime ou par order_date) ou les deux ?
    orderCreatetime est un horodatage complet ou juste une date ? Parce que si c'est un horodatage c'est normal que tu aies un tableau qui te fasse mal, vois-tu

    tu n'as qu'à modifier ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $date = reset($all_order)['order_date'];
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($date !== $v['order_date']) {
        // ...
        $date = $v['order_date'];

  17. #17
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    merci rawsrc, vais tester. Le but est d'avoir le total d'une commande. OrderCreatecommande est un horodatage complet avec les minutes du coup je pense que si on prend cette valeur il voit des heures différentes et les comptabilise comme des commandes différentes ? Mais comme tous les items des produits d'une seule commande ont le même id_commande, cela devrait suffire ... il me semble. D'ailleurs, dans le tableau, je supprimerais bien l'affichage des dates pour chaque produit et ne la mettre que dans la ligne total au format d-m-Y (sans les minutes ). order_date est aussi un horodatage complet;

    bon je vais tester et je reviens

  18. #18
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    bon, désolée, la deuxième partie de ton code je ne vois pas très bien ce qu'elle vient remplacer ...

  19. #19
    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
    ben je pensais que order_date n'était qu'une date sans heures, cette colonne devrait s'appeler order_datetime pour éviter la confusion.
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
     
    $this->db->join('indochine_products_options','indochine_products_options.product_option_id=indochine_order.options');
    $uid       = $this->session->userdata('uid');
    $all_order = $this->db->order_by('orderCreatetime', 'DESC')->get_where('indochine_order' , array('user_id' => $uid))->result_array();
     
    // génération des lignes de détail du tableau
    $rows   = [];
    $i      = 0;
    $sum    = 0;
    $id_cde = reset($all_order)['id_commande'];
     
    foreach ($all_order as $k => $v) {
        if ($id_cde !== $v['id_commande']) {
            // ligne total
            $rows[] = <<<html
    <td style="font-size: 18px;" colspan="4">Total</td>
    <td style="font-size: 18px;">{$sum} &euro;</td>
    html;
            $id_cde = $v['id_commande'];
            $sum    = 0;
        }
     
        // ligne produit
        ++$i;
        $total  = $v['qnty'] * ($v['product_option_price'] + $v['product_option_extra']);
        $sum   += $total;
        $rows[] = <<<html
    <td style="font-size: 18px;">{$i}</td>
    <td style="font-size: 18px;">{$v['proname']}</td>
    <td style="font-size: 18px;">{$v['orderCreatetime']}</td>
    <td style="font-size: 18px;">{$v['qnty']}</td>
    <td style="font-size: 18px;">{$total} &euro;</td>
    html;
    }
    // ligne total
    $rows[] = <<<html
    <td style="font-size: 18px;" colspan="4">Total</td>
    <td style="font-size: 18px;">{$sum} &euro;</td>
    html;
    ?>
    <table class="table table-bordered">
        <thead>
            <tr>
                <th>Id</th>
                <th><?= $this->lang->line('Productname') ?></th>
                <th><?= $this->lang->line('Orderdate') ?></th>
                <th><?= $this->lang->line('Quantity') ?></th>
                <th><?= $this->lang->line('Price') ?></th>
                <th>Total</th>
            </tr>
        </thead>
        <tbody>
            <tr><?= implode('</tr><tr>', $rows) ?></tr>
        </tbody>
    </table>

  20. #20
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Merci rawsrc, pardon de ne répondre que maintenant, j'ai eu du taf tout le we.
    J'ai essayé ton code : ça met 1 ligne produit puis une tripotée de lignes tOTAL, puis une ligne produit, etc ...
    Le code à l'origine affichait bien les lignes par produit, rangées par date. N'est-il pas possible de créer une requête en faisant un SUM sur le champ price pour tous les produits ayant le même id_commande ?

    Merci pour ton aide !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [XL-2003] Sous Totaux dans une liste grace à des "Inputbox".
    Par graphikris dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/05/2013, 17h37
  2. Réponses: 7
    Dernier message: 08/10/2012, 15h46
  3. [AC-2002] Comment calculer des sous-totaux dans une requete croisee
    Par babinou dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/08/2009, 09h43
  4. Ne pas faire apparaitre les titres des sous figures dans la table des figures?
    Par Contact2012 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 7
    Dernier message: 27/04/2009, 17h39
  5. [VRML] Faire des trous ronds dans une table.
    Par yoyo910 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 22/03/2006, 17h56

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