Grouper et somme

Résolu/Fermé
oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021 - 8 nov. 2021 à 16:36
jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025 - 19 nov. 2021 à 14:55
Bonjour
j'ai besoin d'aide SVP , sa fait une semaine je me retrouve pas malgré plusieurs recherches sur le net , rien m'a aider.
mon besoin c'est tout d'abord :
- selon le formulaire rempli , grouper les éléments du tableau selon la date_appel (nom du mois ), clients, ncontrat, repere.......etc
- ensuite afficher le nom du mois et son total ainsi que le total de l’année (voir image)

image :



voici mon code à corriger :

<div class="container-fluid">
            <div class="col-lg-12">

                <div class="card">
                    <div class="card-body">
                        <h4 class="card-title">Total panne</h4>
                        <form action="charts.php" method="POST">
                            <div class="modal-body">
                                <div class="form-row">
                                    <div class="form-group col-md-3">
                                        <label>ANNEE</label>
                                        <select name="year" class="form-control">
                                            <option value="">Choisir une année</option>
                                            <?php
                                            for ($i=date('Y'); $i>=2019; $i--){?>
                                            <option value="<?php echo $i; ?>"><?php echo $i; ?></option>
                                            <?php } ?>
                                        </select>
                                    </div>

                                    <div class="form-group col-md-6">
                                        <label for="nom_client">CLIENTS</label>
                                        <select onChange="getNcontrat(this.value);" name="nom_client" id="client" class="form-control">
                                            <option value="">Selectionnez un client</option>
                                            <?php      
                                            $query = $connexion->query('SELECT * FROM clients');
                                            while ($row = $query->fetch()){ ?>
                                            <option value="<?php echo $row['nom_client']; ?>"><?php echo $row['nom_client']; ?></option>;
                                            <?php } ?>
                                        </select>
                                    </div>
                                </div>

                                <div class="form-row">
                                    <div class="form-group col-md-4">
                                        <label for="n_contrat">N°CONTRAT</label>
                                        <select name="n_contrat" id="ncontrat-list" class="form-control">
                                            <option value="">Selectionnez N°CONTRAT</option>
                                        </select>
                                    </div>

                                    <div class="form-group col-md-3">
                                        <label for="repere">REPERE</label>
                                        <select name="repere" id="repere-list" class="form-control">
                                            <option value="">Choisir un repere</option>
                                        </select>
                                    </div>
                                </div>
                            </div>
                            <div class="float-right">
                                <button type="submit" name="afficher_btn" class="btn btn-primary">Afficher</button>
                                <a href="charts.php" type="button" class="btn btn-success">Initialiser</a>
                            </div>
                        </form>
                    </div>
                </div>

                <div class="card shadow mb-4">
                    <div class="card-body">
                        <div class="table-responsive">
                            
                            <h4>
                                <div class="form-row">
                                    <div class="form-group col-md-3 text-primary"><?php if(ISSET($_POST['afficher_btn'])){echo $_POST['year'];}?></div>
                                    <div class="form-group col-md-2 text-danger"><?php if(ISSET($_POST['afficher_btn'])){echo $_POST['n_contrat'];}?></div>
                                    <div class="form-group col-md-6 text-danger"><?php if(ISSET($_POST['afficher_btn'])){echo $_POST['nom_client'];}?></div>
                                    <div class="form-group col-md-1 text-danger"><?php if(ISSET($_POST['afficher_btn'])){echo $_POST['repere'];}?></div>
                                </div>
                            </h4>

                            <table class="table table-bordered" width="100%" cellspacing="0">
                                <thead class="bg-dark font-weight-bold text-white">
                                    <tr align=center>
                                        <th width="10%">DATE</th>
                                        <th>COMMENTAIRES</th>
                                        <th>TECHNICIENS</th>
                                        <th width="5%">PANNE</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php
                                        $connexion = mysqli_connect("localhost","root","","adminpanel") or die("Erreur de connexion.");

                                        if(ISSET($_POST['afficher_btn'])){
                                                
                                            $year = $_POST['year'];
                                            $nom_client = $_POST['nom_client'];
                                            $n_contrat = $_POST['n_contrat'];
                                            $repere = $_POST['repere'];

                                            if($year != "" || $nom_client != "" || $n_contrat != "" || $repere != ""){
                                                
                                                $sql = "SELECT date_appel, commentaires, nom_technicien, nombre_panne FROM rapports
                                                WHERE year(date_appel)='$year' AND nom_client='$nom_client' AND n_contrat='$n_contrat' AND repere='$repere'
                                                GROUP BY MONTHNAME(date_appel)";

                                                $query = mysqli_query($connexion, $sql) or die(mysqli_error());

                                                while($row = mysqli_fetch_array($query)){
                                                    echo "<tr>
                                                    <td>".$row['date_appel']."</td>
                                                    <td>".$row['commentaires']."</td>
                                                    <td>".$row['nom_technicien']."</td>
                                                    <td>".$row['nombre_panne']."</td>
                                                    </tr>"; 
                                                    ?>
                                                        <tr>
                                                            <th colspan="3">TOTAL DU MOIS DE<?php echo $row->MONTHNAME(date_appel);?></th>
                                                            <td><?php echo $row->sum(nombre_panne);?></td>
                                                        </tr>   
                                                    <?php  
                                                } 
                                                ?>
                                                    <tr>
                                                        <th colspan="3">TOTAL ANNEE</th>
                                                        <td><?php echo $row->sum(nombre_panne);?></td>
                                                    </tr>   
                                                <?php                                             
                                            }else{
                                                ?>
                                                    <tr>
                                                        <td colspan=4 align=center>Pas d'enregistrement trouvé !</td>
                                                    </tr>
                                                <?php
                                            }
                                        }           
                                    ?>
                                </tbody>
                            </table>
                        </div>
                    </div>
                </div>
            </div>
        </div>
   

3 réponses

jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025 4 735
Modifié le 8 nov. 2021 à 17:38
Bonjour,

Déjà.. as tu testé ta requête sql DIRECTEMENT dans ta BDD ( via l'onglet requête (ou sql) de phpmyadmin ??
Car je pense que ton souci vient déjà de là
SELECT date_appel
    , commentaires
    , nom_technicien
    , nombre_panne
 FROM rapports
WHERE year(date_appel)='$year' 
   AND nom_client='$nom_client'
   AND n_contrat='$n_contrat' 
   AND repere='$repere'
GROUP BY MONTHNAME(date_appel)

NB: pour tester, remplacer les variables PHP par de vraies valeurs disponibles dans la bdd bien entendu ...

Et donc... tu fais des group by .. mais tu sembles avoir oublié d'utiliser la fonction SUM ou COUNT ....
C'est donc un souci de sql et non de php ...

0
oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021
8 nov. 2021 à 17:58
MERCI pour ta réponse, je viens d'essayer et effectivement le code marche dans SQL lorsque je remplace les variables mais mon soucis demeure toujours :

voir image :



je veux que mettre ensemble pas les séparer et aussi stp donne moi le code pour le calcule de l’année?

<table class="table table-bordered" width="100%" cellspacing="0">
                                <thead class="bg-dark font-weight-bold text-white">
                                    <tr align=center>
                                        <th width="10%">DATE</th>
                                        <th>COMMENTAIRES</th>
                                        <th>TECHNICIENS</th>
                                        <th width="5%">PANNE</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php
                                        $connexion = mysqli_connect("localhost","root","","adminpanel") or die("Erreur de connexion.");

                                        if(ISSET($_POST['afficher_btn'])){
                                                
                                            $year = $_POST['year'];
                                            $nom_client = $_POST['nom_client'];
                                            $n_contrat = $_POST['n_contrat'];
                                            $repere = $_POST['repere'];

                                            if($year != "" || $nom_client != "" || $n_contrat != "" || $repere != ""){
                                                
                                                $sql = "SELECT MONTHNAME(date_appel) as MONTHNAME, commentaires, nom_technicien, nombre_panne,
                                                SUM(nombre_panne) as TOTAL
                                                FROM rapports
                                                WHERE year(date_appel)='$year' AND nom_client='$nom_client' AND n_contrat='$n_contrat' AND repere='$repere'
                                                GROUP BY MONTHNAME(date_appel), commentaires, nom_technicien, nombre_panne";

                                                $query = mysqli_query($connexion, $sql) or die(mysqli_error());

                                                while($row = mysqli_fetch_array($query)){
                                                    echo "<tr>
                                                    <td>".$row['MONTHNAME']."</td>
                                                    <td>".$row['commentaires']."</td>
                                                    <td>".$row['nom_technicien']."</td>
                                                    <td>".$row['nombre_panne']."</td>
                                                    </tr>"; 
                                                    ?>
                                                        <tr>
                                                            <th colspan="3">Total <?php echo $row['MONTHNAME'];?></th>
                                                            <td><?php echo $row['TOTAL'];?></td>
                                                        </tr>   
                                                    <?php  
                                                } 
                                                ?>
                                                    <tr>
                                                        <th colspan="3">TOTAL ANNEE</th>
                                                        <td><?php echo $row['TOTALS'];?></td>
                                                    </tr>   
                                                <?php                                             
                                            }else{
                                                ?>
                                                    <tr>
                                                        <td colspan=4 align=center>Pas d'enregistrement touvé !</td>
                                                    </tr>
                                                <?php
                                            }
                                        }           
                                    ?>
                                </tbody>
                            </table>
0
jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025 4 735
8 nov. 2021 à 19:51
Je doute que la requête SQL te retourne réellement ce que tu espères....
Pourrais tu nous montrer le résultat de la requête lorsque tu la testes dans phpmyadmin ??

A noter que tu ne peux pas avoir à la fois nombre_panne et SUM(nombre_panne) as TOTAL
Il ne faut garder que la somme...
et donc, remplacer
<td>".$row['nombre_panne']."</td>


par :
<td>".$row['TOTAL']."</td>



Et pour le grand total .. il te suffit d'initialiser une variable avant ta boucle ..
puis, dans ta boucle, y additionner le total de chaque mois..


PS: Ici on ne donne pas du code tout fait ... mais on veut bien aider à corriger ou à améliorer.
0
oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021 > jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025
9 nov. 2021 à 14:22
LORSQUE JE TESTE DANS PHPMYADMIN :



je sais qu'on donne pas les code tout fait mais si je demande c'est parce que je suis perdu la. déjà vous verrez que moi même j'ai codé et je veux qu'on aide en fonction de mon travail.

Mon soucis c'est que je n'arrive pas a grouper les mêmes mois et faire la somme de l’année malgré votre aide.
0
jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025 4 735 > oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021
9 nov. 2021 à 14:39
Comme tu peux le voir, tu as deux fois la ligne "november" ...
cela est dû, comme je te l'ai dis ... au fait que tu as, dans ta requête, nombre_panne et SUM(nombre_panne) as TOTAL
Il faut retirer le "nombre_panne" et ne garder que celui avec le SUM
0
oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021 > jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025
11 nov. 2021 à 14:43
Bonjour
je viens de faire ta proposition , il y a toujours deux ligne "november" ou il accumule en un c'est pas comme ça je veux.

je veux comme ça :

TABLEAU

DATE | COMMENTAIRES | NOM | PANNE
2021-09-10 | texte | JOEL | 1
2021-09-11 | texte | MARX | 1
2021-09-23 | texte | JEAN | 1
nfois
Subtotal NOVEMBER = 3

2021-10-10 | texte | JOEL | 1
2021-10-11 | texte | MARX | 1
nfois
Subtotal OCTOBER = 2

Total année = 5

je veux qu'il liste tous les éléments et non grouper
comme ça :

DATE | COMMENTAIRES | NOM | PANNE
2021-09-10 | texte | JOEL | 3
Subtotal NOVEMBER = 3

2021-10-10 | texte | JOEL | 2
Subtotal OCTOBER = 2

Total année = 5

le soucis de calcul c'est régler mais lister non

voici le code améliorer :

<?php
$connexion = mysqli_connect("localhost","root","","adminpanel") or die("Erreur de connexion.");

if(ISSET($_POST['afficher_btn'])){

$year = $_POST['year'];
$nom_client = $_POST['nom_client'];
$n_contrat = $_POST['n_contrat'];
$repere = $_POST['repere'];

if($year != "" || $nom_client != "" || $n_contrat != "" || $repere != ""){
$sql = "SELECT MONTHNAME(date_appel) as MONTHNAME, date_appel, commentaires, nom_technicien, nombre_panne,
SUM(nombre_panne) as SUBTOTAL
FROM rapports
WHERE year(date_appel)='$year' AND nom_client='$nom_client' AND n_contrat='$n_contrat' AND repere='$repere'
GROUP BY MONTH(date_appel)
ORDER BY date_appel";

$query = mysqli_query($connexion, $sql) or die(mysqli_error());

while($row = mysqli_fetch_array($query)){

echo '<tr>';
echo '<td>'.$row['date_appel'].'</td>';
echo '<td>'.$row['commentaires'].'</td>';
echo '<td>'.$row['nom_technicien'].'</td>';
echo '<td align=center>'.$row['nombre_panne'].'</td>';
echo '</tr>';

$total += $row['SUBTOTAL'];
?>
<tr class="text-primary" align=center>
<th colspan="3">Total <?php echo $row['MONTHNAME'];?></th>
<td><?php echo $row['SUBTOTAL'];?></td>
</tr>
<?php
}
?>
<tr class="bg-light text-dark font-weight-bold">
<th colspan="3">TOTAL ANNEE</th>
<td align=center><?php echo $total ?></td>
</tr>
<?php
}
}
?>


affichage :
0
jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025 4 735 > oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021
11 nov. 2021 à 15:56
Pareil pour les dates...
Tu ne peux pas avoir à la fois
MONTHNAME(date_appel) as MONTHNAME,
et date_appel....
0
oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021
11 nov. 2021 à 17:07
tes indications n’amènent a rien frère
tu me dis d'enlever le nombre_panne ou sum(nombre_panne) as SUBTOTAL maintenant ce sont les dates
je viens de le faire rien a changer; ça s'affiche pareillement sauf que cette fois il manque les données dans les cases nombre_panne.

voir image
0
jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025 4 735
11 nov. 2021 à 22:18
Ah la la la la .....
Déjà.. on n'est pas frères ....

Ensuite.. je t'ai dit qu'une requête SQL ça se teste d'abord DANS PHPMYADMIN ...( et pas via le code php )
Une fois que ta requête te donnera les bonnes infos dans phpmyadmin... là tu pourras la mettre dans ton code php.

Ensuite..
Tu veux faire une somme en groupant par les "mois"
Il faut donc le SUM() .. et comme tu fais un GROUP BY MONTHNAME ... il ne faut garder dans la partie select que le MONTHNAME ..


Alors.. oui.. je pourrais te donner la requête à écrire ... mais ce n'est pas ma façon de voir les choses ( et puis ici on ne fait pas le taff à la place des autres)
Je préfère que tu comprennes un minimum ... plutot que de copier/coller bêtement la réponse...

Donc si tu lieu de dire que ça ne mène à rien.. tu prenais 5 minutes pour lire et appliquer les conseilles qu'on te donne.. ça irait surement mieux...
0
oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021 > jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025
12 nov. 2021 à 22:48
ok merci c'est gentil

d’après tes explications voici le code modifier :

$sql = "SELECT date_appel, commentaires, nom_technicien,
                                                SUM(nombre_panne) as nombre_panne,
                                                MONTHNAME(date_appel) as MONTHNAME
                                                FROM rapports
                                                WHERE year(date_appel)='$year' AND nom_client='$nom_client' AND n_contrat='$n_contrat' AND repere='$repere'
                                                GROUP BY MONTH(date_appel), commentaires, nom_technicien"; 


affichage dans PHPMYADMIN :


maintenant comment afficher le sous total mois et le total année?

d'apres mon code :
<?php
                                        $connexion = mysqli_connect("localhost","root","","adminpanel") or die("Erreur de connexion.");

                                        if(ISSET($_POST['afficher_btn'])){
                                                
                                            $year = $_POST['year'];
                                            $nom_client = $_POST['nom_client'];
                                            $n_contrat = $_POST['n_contrat'];
                                            $repere = $_POST['repere'];
                                            
                                            if($year != "" || $nom_client != "" || $n_contrat != "" || $repere != ""){

                                                $sql = "SELECT date_appel, commentaires, nom_technicien,
                                                SUM(nombre_panne) as nombre_panne,
                                                MONTHNAME(date_appel) as MONTHNAME
                                                FROM rapports
                                                WHERE year(date_appel)='$year' AND nom_client='$nom_client' AND n_contrat='$n_contrat' AND repere='$repere'
                                                GROUP BY MONTH(date_appel), commentaires, nom_technicien"; 

                                                $query = mysqli_query($connexion, $sql) or die(mysqli_error());
            
                                                while($row = mysqli_fetch_array($query)){
                                                    echo '<tr>';
                                                    echo '<td>'.$row['date_appel'].'</td>';
                                                    echo '<td>'.$row['commentaires'].'</td>';
                                                    echo '<td>'.$row['nom_technicien'].'</td>';
                                                    echo '<td align=center>'.$row['nombre_panne'].'</td>';
                                                    echo '</tr>';
 $total += $row['nombre_panne'];
                                                    ?>
                                                        <tr class="text-primary" align=center>
                                                            <th colspan="3">Total <?php echo $row['date_appel'];?></th>
                                                            <td><?php echo $row['nombre_panne']; ?></td>
                                                        </tr>  
                                                    <?php  
                                                }
?>
                                                        <tr class="bg-light text-dark font-weight-bold">
                                                            <th colspan="3">TOTAL ANNEE</th>
                                                            <td align=center><?php echo $total ?></td>
                                                        </tr>
                                                    <?php 
                                            }     
                                        }           
                                    ?>


affichage page web :
0
jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025 4 735 > oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021
12 nov. 2021 à 23:59
SELECT date_appel,

NONNNNNN!!!!!!!!!
SELECT MONTH(date_appel) as MOIS,
0
oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021 > jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025
13 nov. 2021 à 04:45
   $sql = "SELECT month(date_appel) as date_appel, commentaires, nom_technicien,
                                                SUM(nombre_panne) as nombre_panne,
                                                MONTHNAME(date_appel) as MONTHNAME
                                                FROM rapports
                                                WHERE year(date_appel)='$year' AND nom_client='$nom_client' AND n_contrat='$n_contrat' AND repere='$repere'
                                                GROUP BY MONTH(date_appel), commentaires, nom_technicien"; 
0
jordane45 Messages postés 38429 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 février 2025 4 735 > oliviernapoleon Messages postés 21 Date d'inscription mercredi 8 septembre 2021 Statut Membre Dernière intervention 1 décembre 2021
13 nov. 2021 à 10:05
et donc, ça donne quoi dans phpmyadmin ??
0