CSV导出:多个数据库行到单行

时间:2017-03-15 12:19:39

标签: php mysql csv

您好,

问题:我从数据库导出,但是需要从两个表中提取数据。我通过内部联接实现了这一点。

artikel是包含基本信息的表格。它包含id,商品编号,名称,类型和包装形式。

article_content是包含文章的表格,但是,有多种语言。每篇文章对每种语言都有一行。

导出代码

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=artikeldatenbank-' . date("dmyhi") . '.csv');

$output = fopen('php://output', 'w');

$stmt = $db->prepare('SELECT artikel.id, artikel.artikel_nummer, artikel.artikel_name, artikel.artikel_packung, artikel.artikel_cat, article_content.article_text, article_content.article_recuse, article_content.article_spec FROM artikel INNER JOIN article_content ON article_content.article_id = artikel.artikel_nummer');
$stmt->execute();

$result = $stmt->get_result();

while ($row = $result->fetch_assoc())
fputcsv($output, $row);

我想要实现的目标

我需要article_content表格中每一行的一行,而不是多行。很抱歉这些链接,但imgur不允许我上传这些链接。 (不知道为什么)

现在发生了什么(图片):http://prntscr.com/ek86bn

我想要的(编辑过的图片):http://prntscr.com/ek87ct

实现这一目标的最佳方法是什么?这可能是我现在这样做的方式吗?

1 个答案:

答案 0 :(得分:1)

跳过VIEW解决方案,按代码解决,我的建议是

$result = $stmt->get_result();

$artikeID = '';
$newRow = [];
while ($row = $result->fetch_assoc())
{
    if($artikeID != $row['id'])
    {
        if(!empty($newRow))
        {
            fputcsv($output, $newRow);
            $newRow = [];
        }
        $artikeID = $row['id'];
        $newRow = $row;
    }
    else 
    {
        $newRow['title-'.$row['id']] = $row['artikel_name'];
        $newRow['content-'.$row['id']] = $row['article_text'];
    }
}
相关问题