Mettre deux lignes d'une requête sql en une seule dans un fichier Excel
Lemjid
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
J'ai la requête qui donne comme résultat :

Apres avoir choisir les dates(Start/Stop) je généré un fichier Excel comme ca

Je veux avoir le résultat suivante :

J'utilise le code simple :
$query = " SELECT ....";
$result= $mysqli->query($query);
if( mysqli_num_rows($result) > 0){ $output .= '
<table class="table" bordered="1">
<tr>
<th class="virsteligne">Date start</th>
<th class="virsteligne">IO start</th>
<th class="virsteligne">lat start</th>
<th class="virsteligne">lng start</th>
<th class="virsteligne">Date stop</th>
<th class="virsteligne">IO stop</th>
<th class="virsteligne">lat stop</th>
<th class="virsteligne">lng stop</th>
</tr>
';
while($row = mysqli_fetch_array($result)) {
$output .= ' <tr>
<td>'.$row["dates"].'</td>
<td>'.$row["io1"].'</td>
<td>'.$row["lat"].'</td>
<td>'.$row["lng"].'</td>
<td>'.$row["io1"].'</td>
<td>'.$row["lat"].'</td>
<td>'.$row["lng"].'</td>
</tr>';}
$output .= '</table>';
$filename = "Rapport_".date('Y-m-d H:i:s') . ".xls";
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"$filename\"");
Apres avoir choisir les dates(Start/Stop) je généré un fichier Excel comme ca
Je veux avoir le résultat suivante :
J'utilise le code simple :
$query = " SELECT ....";
$result= $mysqli->query($query);
if( mysqli_num_rows($result) > 0){ $output .= '
<table class="table" bordered="1">
<tr>
<th class="virsteligne">Date start</th>
<th class="virsteligne">IO start</th>
<th class="virsteligne">lat start</th>
<th class="virsteligne">lng start</th>
<th class="virsteligne">Date stop</th>
<th class="virsteligne">IO stop</th>
<th class="virsteligne">lat stop</th>
<th class="virsteligne">lng stop</th>
</tr>
';
while($row = mysqli_fetch_array($result)) {
$output .= ' <tr>
<td>'.$row["dates"].'</td>
<td>'.$row["io1"].'</td>
<td>'.$row["lat"].'</td>
<td>'.$row["lng"].'</td>
<td>'.$row["io1"].'</td>
<td>'.$row["lat"].'</td>
<td>'.$row["lng"].'</td>
</tr>';}
$output .= '</table>';
$filename = "Rapport_".date('Y-m-d H:i:s') . ".xls";
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"$filename\"");
A voir également:
- Mettre deux lignes d'une requête sql en une seule dans un fichier Excel
- Fichier bin - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Déplacer une colonne excel - Guide
5 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
je suggère de remplacer ta bouccle while par:
EDIT: quelques modifs
je suggère de remplacer ta bouccle while par:
$gauche = TRUE; while($row = mysqli_fetch_array($result)) { if ($gauche) { $output .= ' <tr> '; } $output .= '<td>'.$row["dates"].'</td> <td>'.$row["io1"].'</td> <td>'.$row["lat"].'</td> <td>'.$row["lng"].'</td> <td>'.$row["io1"].'</td> <td>'.$row["lat"].'</td> <td>'.$row["lng"].'</td>'; if ( ! $gauche) { $output .= ' </tr> '; } $gauche = ! $gauche; }
EDIT: quelques modifs
peux-tu montrer ton code?
tiens compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
tiens compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Bonjour,
c'est bien fait ,
c'est bien fait ,
$query = " SELECT ...."; $result= $mysqli->query($query); if( mysqli_num_rows($result) > 0){ $output .= ' <table class="table" bordered="1"> <tr> <th class="virsteligne">Date start</th> <th class="virsteligne">IO start</th> <th class="virsteligne">lat start</th> <th class="virsteligne">lng start</th> <th class="virsteligne">Date stop</th> <th class="virsteligne">IO stop</th> <th class="virsteligne">lat stop</th> <th class="virsteligne">lng stop</th> </tr> '; while($row = mysqli_fetch_array($result)) { $output .= ' <tr> <td>'.$row["dates"].'</td> <td>'.$row["io1"].'</td> <td>'.$row["lat"].'</td> <td>'.$row["lng"].'</td> <td>'.$row["io1"].'</td> <td>'.$row["lat"].'</td> <td>'.$row["lng"].'</td> </tr>';} $output .= '</table>'; $filename = "Rapport_".date('Y-m-d H:i:s') . ".xls"; header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"$filename\"");
..... $result= $mysqli->query($query); if( mysqli_num_rows($result) > 0) { $output .= ' <table class="table" bordered="1"> <tr> <th class="virsteligne">Article</th> <th class="virsteligne">Date start</th> <th class="virsteligne">Heure start</th> <th class="virsteligne">GPS Start</th> <th class="virsteligne">Adress start</th> <th class="virsteligne">Date stop</th> <th class="virsteligne">Heure stop</th> <th class="virsteligne">Coordonnées GPS STOP</th> <th class="virsteligne">Adresse stop</th> <th class="virsteligne">Temps</th> <th class="virsteligne">Contact</th> <th class="virsteligne">Station </th> <th class="virsteligne">Trajet</th> <th class="virsteligne">ometre</th> </tr>'; $gauche = TRUE; while($row = mysqli_fetch_array($result)){ if ($gauche) { $output .= ' <tr> '; } $output .= ' <td>'.$row["name"].'</td> //Début Tous les lignes de la base de donnéees dont les Io=1 // <td>'.date("d/m/Y", strtotime($row["date"])).'</td> <td>'.date("H:i:s", strtotime($row["date"])).'</td> <td>'.$row["lat"].','.$row["lng"].'</td> <td>'.$row["name"].'</td> //Fin //Début Tous les lignes de la base de donnéees dont les Io=0 // <td>'.date("d/m/Y", strtotime($row["dt_trackers"])).'</td> <td>'.date("H:i:s", strtotime($row["dt_trackers"])).'</td> <td>'.$row["lat"].','.$row["lng"].'</td> <td>'. $adresse.'</td> //Fin <td>'.$row["Temps"].'</td> <td>'.$row["Contact"].'</td> <td>'.$row["Station"].'</td> <td>'.$row["Trajet"].'</td> <td>'.$row["ometre"].'</td>'; if ( ! $gauche) { $output .= ' </tr> '; } $gauche = ! $gauche; } $output .= ' <tr> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne">Somme</th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> <th class="lastligne"></th> </tr> '; $output .= '</table>'; $filename = "Rapport_".date('Y-m-d H:i:s') . ".xls"; header("Content-Type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"$filename\""); }
J'ai la ajouté au niveau de requête de SELECT mais ca pas donnée la bonne résultat et à mon avis c'est incorrecte de le mettre au niveau de SELECT car le résultat de select est : 
Le résultat au niveau de Excel est :
Et n'oublier pas que les valeurs de SELECT sont devenue dans une seule ligne (avec le code #10)
Le résultat au niveau de Excel est :
Et n'oublier pas que les valeurs de SELECT sont devenue dans une seule ligne (avec le code #10)
Oui c'est vrai mais comment je peux le faire en PHP vue que j'ai passé par une long requête pour filtrer les 1iere dont j'ai io1=1 puis les 1iere dont io1=0 et a ce de suite (la requête de select c'est déjà assez compliquer ) :
EDIT : Ajout des balises de code
Qui donne comme résultat :
*
2020-07-23 10:42:26 - 2020-07-23 10:16:50 et puis
2020-07-23 10:59:04 - 2020-07-23 10:56:55 ( c-a-d Io0 -Io1) ....
select cp.idc as id, cp.dt_trackers, cp.io1c as io1, cp.name, TIMEDIFF(cp.dt_trackers, dp.dt_trackers) as duree from (select d1.id as idc, d1.io1 as io1c, d1.dt_trackers, max(d2.id) as idp, d1.name from gs_data as d1, gs_data as d2 where d1.id > d2.id group by d1.id) as cp, gs_data as dp where dp.id = cp.idp and dp.io1 <> cp.io1c ;
EDIT : Ajout des balises de code
Qui donne comme résultat :
*
-
- Donc moi je doit faire au niveau de cette requete :
-
2020-07-23 10:42:26 - 2020-07-23 10:16:50 et puis
2020-07-23 10:59:04 - 2020-07-23 10:56:55 ( c-a-d Io0 -Io1) ....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
moi je ferais presque comme en #18:
- quand tu traites un enregistrement de droite, tu mémorises sa date dans une variable et tu ne termines pas la ligne de la table
- quand tu traites un enregistrement de gauche, sauf le premier, tu calcules la durée "contact off" et tu l'affiches à la fin de la ligne précédente, que tu termines
- à la fin de la boucle, il faut terminer la dernière ligne
- quand tu traites un enregistrement de droite, tu mémorises sa date dans une variable et tu ne termines pas la ligne de la table
- quand tu traites un enregistrement de gauche, sauf le premier, tu calcules la durée "contact off" et tu l'affiches à la fin de la ligne précédente, que tu termines
- à la fin de la boucle, il faut terminer la dernière ligne
Voila mon boucle while déjà calculer les date a droite et à gauche :
while($row = mysqli_fetch_array($result)){ $odometre =(($row["odometre"])/1000); $odometre_converti = str_replace('.',',',$odometre); $duree =((strtotime($row["dt_trackers"]))-(strtotime($row["dt_trackers"]))); $objadd=new DbFunction(); $adresse=$objadd->geolocationAddress($row["lat"],$row["lng"]); if ($gauche) { $output .= ' <tr> <td>'.$row["name"].'</td>'; $d1 = $row["dt_trackers"]; $odometre1 = $row["odometre"]; } $output .= ' <td>'.date("d/m/Y", strtotime($row["dt_trackers"])).'</td> <td>'.date('H:i:s', (strtotime("+60 minute", strtotime($row["dt_trackers"])))).'</td> <td>'.$row["lat"].','.$row["lng"].'</td> <td>'.$adresse.'</td>'; if ( ! $gauche) { $d2 = $row["dt_trackers"]; $duree =((strtotime($d2))-(strtotime($d1))); $odometre2 = $row["odometre"]; $distance=($odometre2-$odometre1); $output .= ' <td>'.date('H:i:s',$duree).'</td> <td>'.$row["contact_off"].'</td> <td>'.$row["stationaire_m"].'</td> <td>'.$distance.'</td> <td>'.$odometre_converti.'</td> </tr>'; } $gauche = ! $gauche; }