2013-07-04 49 views
0

我發現了一個類似的問題,但由於缺乏信息而沒有解決方案。 我有低於該代碼從連接的MySQL數據庫的數據輸出到在下面的格式格式化的CSV文件...使用PHP從MySQL數據庫中更改CSV格式的文件

 
First Name:Surname:GCNumber:Dept:Start Date:Introduction:Theory:Fire Safety:Governance: 
John:Smith:123456:HR:03/08/2013:Pass:Pass:Fail:Pass: 
Jane:Watson:123445:IT:03/08/2013:Pass:Fail:Pass:Pass: 
Mark:Byron:123442:IT:03/08/2013:Fail:Fail:Not Done:Not Done: 

: =只是用來顯示每個柱

它只是輸出所有行和在同一結構中的數據庫中的列,以及重新命名列標題以便在導入到Excel中時更加友好。 我需要的是改變這種輸出到下面的格式...

 
First Name:Surname:GCNumber:Dept:Email:Start Date:Module:Status: 
John:Smith:123456:HR:03/08/2013:Introduction:Pass: 
John:Smith:123456:HR:03/08/2013:Theory:Pass: 
John:Smith:123456:HR:03/08/2013:Fire Safety:Fail: 
John:Smith:123456:HR:03/08/2013:Governance:Pass: 
Jane:Watson:123445:IT:03/08/2013:Introduction:Pass: 
Jane:Watson:123445:IT:03/08/2013:Theory:Fail: 
Jane:Watson:123445:IT:03/08/2013:Fire Safety:Pass: 
Jane:Watson:123445:IT:03/08/2013:Governance:Pass: 
Mark:Byron:123442:IT:03/08/2013:Introduction:Fail: 
Mark:Byron:123442:IT:03/08/2013:Theory:Fail: 
Mark:Byron:123442:IT:03/08/2013:Fire Safety:Not Done: 
Mark:Byron:123442:IT:03/08/2013:Governance:Not Done: 

: =只是用來表明每列

所以不是每個人一個條目,每個模塊的結果,他們我已經完成了,我需要它是一個單獨的條目,爲每個人所做的模塊。 這個數據庫和35個模塊總共有更多的領域,但我爲了說明的目的在此將其削減。

作爲一個PHP新手等位,我正在努力讓我的頭在如何做到這一點。 這是可能的,還是會更容易嘗試和更改數據庫的結構以所需的格式?

任何幫助或指針在正確的方向將是偉大的。 託尼

<?php 

function exportMysqlToCsv($table,$filename = 'db-snapshot.csv') 
{ 

    $sql_query = "select fldFirstname as 'First Name', 
    fldSurname as 'Surname', 
    fldGMCNumber as 'GCNumber', 
    fldDestDept as 'Dept', 
    fldStartDate as 'Start Date', 
    fldModule1 as 'Introduction', 
    fldModule2 as 'Theory', 
    fldModule3 as 'Fire Safety', 
    fldModule4 as 'Governance' 
    from $table"; 

    // Gets the data from the database 
    $result = mysql_query($sql_query); 

    $f = fopen('php://temp', 'wt'); 
    $first = true; 
    while ($row = mysql_fetch_assoc($result)) { 
     if ($first) { 
      fputcsv($f, array_keys($row)); 
      $first = false; 
     } 
     fputcsv($f, $row); 
    } // end while 

    $size = ftell($f); 
    rewind($f); 

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Length: $size"); 

// Output to browser with appropriate mime type, you choose ;) 
    header("Content-type: text/x-csv"); 
    // header("Content-type: text/csv"); 
    // header("Content-type: application/csv"); 
    header("Content-Disposition: attachment; filename=$filename"); 
    fpassthru($f); 
    exit; 
} 

?> 
+0

讓我看看你的表格結構和樣品數據....實際上有了這個信息,它會很容易解決這個問題 – Hackerman

回答

1

您可以使用工會這個:

SELECT fldFirstname as 'First Name', fldSurname as 'Surname', 
    fldGMCNumber as 'GCNumber', fldDestDept as 'Dept', 
    fldStartDate as 'Start Date', fldEndDate as 'End Date', 
    'Introduction' as 'Module', fldModule1 as 'Status' FROM records 
UNION 
SELECT fldFirstname,fldSurname,fldGMCNumber,fldDestDept,fldStartDate,fldEndDate, 
    'Theory',fldModule2 FROM records 
UNION 
SELECT fldFirstname,fldSurname,fldGMCNumber,fldDestDept,fldStartDate,fldEndDate, 
    'Fire Safety',fldModule3 FROM records 
UNION 
SELECT fldFirstname,fldSurname,fldGMCNumber,fldDestDept,fldStartDate,fldEndDate, 
    'Governance',fldModule4 FROM records 
ORDER BY Surname, `First Name`, Module; 

SQL Fiddle example

+0

謝謝詹姆斯,這是一種享受! – user2010796

0

我會用一個支點我查詢數據庫。檢查下
If I have a MySQL table looking something like this

所以你基本上會創建一個錶行,說明您的模塊:

Module 
1 | Introduction 
2 | Theory 
3 | Fire Safety 
4 | Governance 

然後它加入到表上方,並使用「案例」語法來達到你的要求。

相關問題