2017-05-03 103 views
0

我在数据库(研究,站点,实验室和研究人员)4桌。它们涉及以下方式:导出嵌套从Postgres数据库到Excel表格文件 - 使用PHP

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]

网站行应该是第二级,然后实验室和调查人员在第三个层次。它应该通过每个代理研究循环,找到通过每个站点相应的站点,然后循环,并发现它的实验室和研究人员。此外,即使寿它正确打印所有研究代理,它只是遍历第一项研究剂,它也导出所有数据的其他代理。

任何人都可以帮助我吗?

谢谢。

+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"; 
     } 
    } 
} 

?> 
相关问题