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

使用PHP使用多个SQL查询输出为CSV格式,php,sql,csv,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($

将一些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


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

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

伙计,你应该像臭鼬一样喝醉。以我为代价。你这个该死的开膛手!你帮我节省了很多时间和精力!我对JOIN语句的工作原理也很感兴趣。非常感谢你!欢迎光临。很高兴这有帮助。加入是一件很好的事情