将嵌套表从Postgres数据库导出到Excel文件 - 使用PHP

时间:2017-05-03 21:27:34

标签: php export-to-excel nested-table

我在数据库中有4个表(研究,网站,实验室和调查员)。它们涉及以下方式:

1研究 1.1网站 1.1.1实验室 1.1.2调查员

我正在尝试将这些表中的数据导出到excel文件,遵循上面的结构。但它只循环并打印每个级别的第一个项目的信息。如何让它打印所有项目?

这是我的代码:

<?php

header("Content-Type: application/xls");    
header("Content-Disposition: attachment; filename=filename.xls");  
header("Pragma: no-cache"); 
header("Expires: 0");

include_once("C:/webroot/connect.php");


//loop the query data to the table in same order as the headers
$sql_data = "select agent, study, ind_no, sponsor, status from dw_regtrack.qlstudies st left join dw_regtrack.user_studies us ON st.study=us.study_name where user_name='gsamara'";
$sql_data2="select study, amtrackid, name, pi, status, irbappcr, ohrp, ib, prot, ic, global1572, 1572, ibc, obarac, dsa FROM dw_regtrack.qlstudysites2";
$sql_data3="select amtrackid, labid, name, cap, clia, lnv FROM dw_regtrack.qlstudysitelabs";
$sql_data4="select amtrackid, personid, name, cv, ml, fd, hspt, dot, pisort from dw_regtrack.qlstudysiteinvests2";

$result=pg_query($sql_data);
$result2=pg_query($sql_data2);
$result3=pg_query($sql_data3);
$result4=pg_query($sql_data4);


while ($row = pg_fetch_array($result, NULL, PGSQL_ASSOC)){
    echo implode("\t", array('Agent', 'Study', 'IND No', 'IND Sponsor', 'Current Status'))."\r\n";
    echo implode("\t", array($row['agent'], $row['study'], $row['ind_no'],$row['sponsor'], $row['status'])) . "\r\n";

    while ($row2=pg_fetch_array($result2, NULL, PGSQL_ASSOC))
    {

        if ($row['study']==$row2['study']){ 
            echo implode("\t", array('','Site', 'PI', 'Status'))."\r\n";        
            echo implode("\t", array('',$row2['name'], $row2['pi'], $row2['status']))."\r\n";
        }

        //foreach

        while ($row3=pg_fetch_array($result3, NULL, PGSQL_ASSOC)){
            if ($row2['amtrackid']==$row3['amtrackid']){
                echo implode("\t", array('','','Lab', 'CAP', 'CLIA', 'LNV'))."\r\n";
                echo implode("\t", array('','',$row3['name'], $row3['cap'], $row4['clia'],$row4['lnv']))."\r\n";
            }
        }
        while ($row4=pg_fetch_array($result4, NULL, PGSQL_ASSOC)){
            if ($row2['amtrackid']==$row4['amtrackid']){
                echo implode("\t", array('','','Investigator', 'CV', 'ML', 'FD'))."\r\n";
                echo implode("\t", array('','',$row4['name'], $row4['cv'], $row4['ml'],$row4['fd']))."\r\n";
            }
        }
    }
}


?>

但是这段代码正在导出这样的数据: [![在此处输入图像说明] [1]] [1]

站点行应该是第二级,然后是第三级的实验室和调查员。它应循环遍历每个代理研究并找到相应的站点,然后遍历每个站点并找到它的实验室和调查员。此外,即使它正确地打印所有Study-agent,它也只循环通过第一个study-agent,并且它确实为其他代理导出任何数据。

任何人都可以帮助我吗?

感谢。

1 个答案:

答案 0 :(得分:0)

问题解决了。这是工作代码。

<?php

header("Content-Type: application/xls");    
header("Content-Disposition: attachment; filename=filename.xls");  
header("Pragma: no-cache"); 
header("Expires: 0");

include_once("C:/webroot/connect.php");

//loop the query data to the table in same order as the headers
$sql_data = "SELECT agent, study, ind_no, sponsor, status 
             FROM dw_regtrack.qlstudies st 
             LEFT JOIN dw_regtrack.user_studies us ON st.study=us.study_name 
             WHERE user_name='gsamara'";

$sql_data2="SELECT study, amtrackid, name, pi, status, irbappcr, ohrp, ib, prot, ic, global1572, 1572, ibc, obarac, dsa 
            FROM dw_regtrack.qlstudysites2";

$sql_data3="SELECT amtrackid, labid, name, cap, clia, lnv 
            FROM dw_regtrack.qlstudysitelabs";

$sql_data4="SELECT amtrackid, personid, name, cv, ml, fd, hspt, dot, pisort 
            FROM dw_regtrack.qlstudysiteinvests2";

$result=pg_query($sql_data);

while ($row = pg_fetch_array($result, NULL, PGSQL_ASSOC)){
    echo implode("\t", array('Agent', 'Study', 'IND No', 'IND Sponsor', 'Current Status'))."\r\n";
    echo implode("\t", array($row['agent'], $row['study'], $row['ind_no'],$row['sponsor'], $row['status'])) . "\r\n";

    $result2=pg_query($sql_data2." WHERE study = '".$row['study']."'");
    while ($row2=pg_fetch_array($result2, NULL, PGSQL_ASSOC))
    {
        echo implode("\t", array('','Site', 'PI', 'Status'))."\r\n";
        echo implode("\t", array('',$row2['name'], $row2['pi'], $row2['status']))."\r\n";

        $result3=pg_query($sql_data3." WHERE amtrackid= '".$row2['amtrackid']."'");     
        while ($row3=pg_fetch_array($result3, NULL, PGSQL_ASSOC)){
            echo implode("\t", array('','','Lab', 'CAP', 'CLIA', 'LNV'))."\r\n";
            echo implode("\t", array('','',$row3['name'], $row3['cap'], $row4['clia'],$row4['lnv']))."\r\n";
        }

        $result4=pg_query($sql_data4." WHERE amtrackid= '".$row2['amtrackid']."'"); 
        while ($row4=pg_fetch_array($result4, NULL, PGSQL_ASSOC)){
            echo implode("\t", array('','','Investigator', 'CV', 'ML', 'FD'))."\r\n";
            echo implode("\t", array('','',$row4['name'], $row4['cv'], $row4['ml'],$row4['fd']))."\r\n";
        }
    }
}

?>
相关问题