使用PHP将多个SQL查询输出为CSV格式

时间:2014-03-06 04:36:48

标签: php sql csv

将一些SQL查询输出为CSV格式时遇到一些问题。我可以成功地执行一个查询并将其写入CSV,但我需要在查询中进行查询,并且我得到了非常棒的无限循环。这是我到目前为止所拥有的

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);

我想要实现的输出是:

在此行中显示客户标题信息a.k.a名字,姓氏,电子邮件

下一行显示有关客户的信息,例如Tony,Mcguire,tony @ b.c

显示Tony的订单标题信息,例如订单号,订单日期

显示Tony的订单信息,例如5122,6 / 3/2013

如果我能把它全部显示为2行,那就更好了。

1 个答案:

答案 0 :(得分:1)

这可以清理很多。如果我理解正确,您需要生成一个报告,其中第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)来指定要包含的数据库字段。日期等)