2017-10-20 58 views
1

Je veux exporter mon enregistrement dans csv de MySQL, je veux obtenir ce résultat en csv généré:Mysql exportation au format CSV avec le groupe au total

Date  | Name | Score 
------------------------------------- 
10/01/17 | John | 1 
10/02/17 | John | 3 
10/03/17 | John | 12 

Total      16 
------------------------------------- 
10/01/17 | Peter | 4 
10/02/17 | Peter | 17 
10/03/17 | Peter | 3 

Total      24 

Mon code actuel fonctionne, mais sans la ligne totale. Voir ci-dessous pour mon code actuel.

function toCsv($data) { 
    $fp = fopen('report.csv', 'w'); 

    foreach ($data as $fields) { 
     fputcsv($fp, $fields); 
    } 

    fclose($fp); 
} 

$arr = ['Data', 'Name', 'Score']; 

while($row = $results->fetch_assoc()) { 
    $data = [ 
     $row['date'], 
     $row['name'], 
     $row['score'] 
    ]; 

    $arr[] = $data; 
} 
toCsv($arr); 

Répondre

2

Ajoutez les scores à une variable $total pendant que vous récupérez chaque ligne.

En outre, la valeur initiale de $arr doit être un tableau contenant les en-têtes en tant que second tableau.

function toCsv($data) { 
    $fp = fopen('report.csv', 'w'); 

    foreach ($data as $fields) { 
     fputcsv($fp, $fields); 
    } 

    fclose($fp); 
} 

$arr = [['Date', 'Name', 'Score']]; 
$total = 0; 
$last_name = null; 
while($row = $results->fetch_assoc()) { 
    if ($last_name && $last_name != $row['name']) { 
     // Name has changed, add a total row for previous name 
     $arr[] = ['Total', $total]; 
     $total = 0; 
     $last_name = $row['name']; 
    } 
    $data = [ 
     $row['date'], 
     $row['name'], 
     $row['score'] 
    ]; 

    $arr[] = $data; 
    $total += $row['score'] 
} 
// Add total row for last name 
$arr[] = ["Total", $total]; 
toCsv($arr); 
+0

Merci pour la réponse, le total est toujours à la fin de la ligne. Je veux que le total soit à la fin de chaque groupe – Cris

+0

J'ai ajouté du code pour créer une ligne totale chaque fois que le nom change. – Barmar

1

Vous devez ajouter nouveau tableau contenant total à la fin

//......... 
//......... 
$total = 0; 
$arr = ['Data', 'Name', 'Score']; 
while($row = $results->fetch_assoc()) { 
    $data = [ 
     $row['date'], 
     $row['name'], 
     $row['score'] 
    ]; 
    $total = $total+$row['score']; 
    $arr[] = $data; 
} 
$total_arr = array(
    "Total", 
    "-", 
    $total 
); 
$arr[] = $total_arr; 
toCsv($arr);