【发布时间】:2015-05-26 14:46:41
【问题描述】:
我正在处理数据到 CSV 函数,但我卡住了。
到目前为止,它从两个表中获取所有数据,并将每个订单的发票数据和客户数据全部放在 1 行中的 CSV 文件中。
我还需要通过 ID 获取 invoice_items(我猜这些需要循环,因为可能有超过 1 个项目,但不确定如何将 invoice_items 添加到查询中,并且我还需要为列,但不确定如何)。
如果可以是这样就很棒了:
|发票详细信息客户详细信息|发票项目
LIST ITEM LIST ITEM LIST ITEM
而不是
发票详情 |客户详情 |发票项目 LIST ITEM LIST ITEM 列表项
真实的数据和标题看起来像
标识 |发票号码 |金额 |姓名 |地址 |发票项目(和 在这部分下面列出)
PHP
header("Content-type: text/csv");
// output any connection error
if ($mysqli->connect_error) {
die('Error : ('.$mysqli->connect_errno .') '. $mysqli->connect_error);
}
$file_name = 'invoice-export-'.date('d-m-Y').'.csv'; // file name
$file_path = 'downloads/'.$file_name; // file path
$file = fopen($file_path, "w"); // open a file in write mode
chmod($file_path, 0777); // set the file permission
$query_table_columns_data = "SELECT *
FROM invoices i
JOIN customers c
ON c.invoice = i.invoice
WHERE i.invoice = c.invoice
ORDER BY i.invoice";
if ($result_column_data = mysqli_query($mysqli, $query_table_columns_data)) {
// fetch table fields data
while ($column_data = $result_column_data->fetch_row()) {
$table_column_data = array();
foreach($column_data as $data) {
$table_column_data[] = $data;
}
// Format array as CSV and write to file pointer
fputcsv($file, $table_column_data, ",", '"');
}
}
【问题讨论】:
-
你不能循环通过 $table_column_data 并在循环中使用 fputcsv,所以每张发票都在下一行吗?
-
我已经进入下一行,我想我不会导出项目,因为我看不到我正在解决这个问题,但我正在尝试解决如何设置列标题名称 - 有什么想法吗?
-
我试过 // 获取标题 while ($headers = mysqli_fetch_field($result_column_data)) { foreach($headers as $header) { $head[] = $header->name; } }
-
嗨詹姆斯。下面来自 Kickstart 的一个实质性答案,这需要相当长的时间才能写出来,两年多之后仍然明显没有得到答复。他们现在有我的支持,但如果你放弃了这个问题,你至少会给他们打勾吗?您显然仍在登录。值得记住的是,像 Stack Overflow 这样的网站是在善意和游戏化的基础上运作的。