Экспорт вложенной таблицы из базы данных Postgres в файл Excel — использование переполнения стека

У меня есть 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]

Строка сайта должна быть на втором уровне, а затем лаборатории и исследователи на третьем уровне. Он должен пройти по каждому агенту-исследованию и найти соответствующий сайт, а затем пройти по каждому сайту и найти его лаборатории и исследователей. Кроме того, даже если он правильно печатает все учебные агенты, он проходит только через первого учебного агента и экспортирует любые данные для других агентов.

Может кто-нибудь мне помочь?

Благодарю.

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

?>
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]