将一些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行,那就更好了。
答案 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)来指定要包含的数据库字段。日期等)