2014-03-06 69 views
0

有一些問題將某些SQL查詢輸出爲CSV格式。我可以成功地做一個查詢並將其寫入CSV,但我需要在查詢中執行查詢,並且我得到了令人敬畏的無限循環。這裏是我到目前爲止使用多個SQL查詢輸出爲CSV格式,使用PHP

header('Content-Type: text/csv'); 
header('Content-Disposition: attachment;filename='.$filename); 
$fp = fopen('php://output', 'w'); 

$result = mysqli_query($conn, "SELECT * FROM Customers") 
    or die("Error: ".mysqli_error($conn)); 

$row = mysqli_fetch_assoc($result); 
    if($row) { 
     fputcsv($fp, array_keys($row)); 
     // reset pointer back to beginning 
     mysqli_data_seek($result, 0); 
    } 

while($row = mysqli_fetch_assoc($result)) { 
    $orderResult = mysqli_query($conn,"SELECT * FROM Orders WHERE order_No = '".$row['customer_ID']."'") 
     or die("Error: ".mysqli_error($conn)); 
    $rowOrder = mysqli_fetch_assoc($orderResult); 
    fputcsv($fp, array_keys($rowOrder)); 
    mysqli_data_seek($result, 0); 
    $rowOrder = mysqli_fetch_assoc($orderResult); 
    fputcsv($fp, $row); 
    fputcsv($fp, $rowOrder); 
} 

fclose($fp); 

我試圖達到的輸出是:該行又名名字,姓氏在

顯示客戶的頭信息,電子郵件

下一行顯示有關信息客戶如託尼·麥圭爾,託尼@ BC

顯示託尼的訂單表頭信息如訂單號,訂單日期

顯示託尼的訂單信息如5 122,6/3/2013

如果我能把它全部顯示成2行,那會更好。

回答

1

這可以清理很多。如果我正確地理解你,你想要生成一個報告,其中第一行是標題,而第二行是客戶/訂單數據。這是我想出了一個例子:

$sql = "SELECT c.*, o.* FROM Customers AS c 
    JOIN Orders AS o ON c.CustomerID = o.CustomerID"; 

$result = mysqli_query($conn, $sql); 

$i = 1; 
while($row = mysqli_fetch_assoc($result)) { 
    if ($i == 1) { 
     // this is the header 
     fputcsv($fp, array_keys($row)); 
     $i++; 
    } 

    // this is the customer/order data 
    fputcsv($fp, $row); 
} 

您可以指定要由替換C到包括數據庫字段*與客戶字段(c.name,c.address等)和O 。*與您的訂單字段(o.orderid,o.date等)

+0

伴侶,你應該得到醉如臭鼬。在我的費用。你流血的開膛手!您幫助我在這裏節省了大量時間和精力!我肯定對JOIN聲明的工作方式非常感興趣。非常感謝你! –

+0

歡迎您。很高興它有幫助。加入是一件非常好的事情要知道 – m79lkm