2017-08-13 25 views
1

我想將4個查詢的結果顯示在一個HTML表格(SQL Server 2012,PHP,HTML)中。我已經可以顯示來自一個數據庫表的結果,但只要我開始查詢其他3個表,它只會從第一個表中返回一行。將多個查詢數據轉換爲單個HTML表格 - 只有一行返回

下面的代碼只有一個查詢並且工作正常 - 它顯示關於患者(名稱,站,房間,導管,個人ID,導管插入日期等)的幾個信息,此刻有三種不同的患者在餐桌上,因此HTML表顯示3行:

<?php 
require_once('header.php'); 

$today = date("d.m.y"); 
$yesterday = date("d.m.y", time() - 60 * 60 * 24); 
$dbyesterday = date("d.m.y", time() - 2*(60 * 60 * 24)); 
?> 

<div class="container" style="padding-top: 80px"> 
    <div id="table_admin" class="span7"> 
      <h3 id="name" style="color: orange">Visitenliste</h3> 
     </br> 

     <table class="table table-responsive table-hover"> 

       <thead> 
       <tr> 
       <th id="tc">Station</th> 
       <th id="tc">Patientennummer</th> 
       <th id="tc">Zimmer</th> 
       <th id="tc">Name</th> 
       <th id="tc">Katheterart</th> 
       <th id="tc">Anlagedatum</th> 
       <th id="tc"><?php echo $dbyesterday; ?></th> 
       <th id="tc"><?php echo $yesterday; ?></th> 
       <th id="tc"><?php echo $today; ?></th> 
       </tr> 
       </thead> 


    <?php 
require_once('server.php'); 


// DB-Query für die Visitenliste 
$sql = "SELECT dbo.patients.Patientennummer, Vorname, Nachname, Station, Zimmer, Katheterart, Anlagedatum, VisTod FROM dbo.patients INNER JOIN dbo.cathinsert ON dbo.patients.Patientennummer = dbo.cathinsert.Patientennummer ORDER BY Station ASC, Zimmer ASC"; 

$result = sqlsrv_query($connection, $sql); 

if($result === false) { 
    die(print_r(sqlsrv_errors(), true)); 
} 

while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) { 

    echo  ("<tr class=\"clickable-row\" data-href=\"visitact.php?Patientennummer=".$row["Patientennummer"]."\">"); 
    echo  ("<td>".$row["Station"]."</td>"); 
    echo  ("<td>".$row["Patientennummer"]."</td>"); 
    echo  ("<td>".$row["Zimmer"]."</td>"); 
    echo  ("<td>".$row["Vorname"]." ".$row["Nachname"]."</td>"); 
    echo  ("<td>".$row["Katheterart"]."</td>"); 
    echo  ("<td>".$row["Anlagedatum"]."</td>"); 
    echo  ("<td>".$row["VisTod"]."</td></tr>"); 

       } 
      ?> 


     </table> 
    </div> 
</div> 
</body> 
</html> 

其結果是,我有3行的所有信息我需要一張桌子。 但是,只要我現在開始添加更多的查詢,附加信息就會顯示正確,但僅適用於第一行!它是唯一顯示的行。我真的搞不明白,爲什麼會發生這種情況。 這是代碼不工作(所有信息都顯示正確,即使是來自附加查詢的信息,但只有一行 - >只有第一位患者,儘管3位保存在數據庫中,儘管第一位代碼顯示了所有3位患者以正確的方式):

<?php 
require_once('header.php'); 
$today = date("d.m.y"); 
$yesterday = date("d.m.y", time() - 60 * 60 * 24); 
$dbyesterday = date("d.m.y", time() - 2*(60 * 60 * 24)); 
?> 

<div class="container" style="padding-top: 80px"> 
<div id="table_admin" class="span7"> 
     <h3 id="name" style="color: orange">Visitenliste</h3> 
     </br> 
     <table class="table table-responsive table-hover"> 

       <thead> 
       <tr> 
       <th id="tc">Station</th> 
       <th id="tc">Patientennummer</th> 
       <th id="tc">Zimmer</th> 
       <th id="tc">Name</th> 
       <th id="tc">Katheterart</th> 
       <th id="tc">Anlagedatum</th> 
       <th id="tc"><?php echo $dbyesterday; ?></th> 
       <th id="tc"><?php echo $yesterday; ?></th> 
       <th id="tc"><?php echo $today; ?></th> 
       </tr> 
       </thead> 

<?php 
require_once('server.php'); 



// DB-Query für die Visitenliste 

$sql = "SELECT dbo.patients.Patientennummer, Vorname, Nachname, Station, Zimmer, Katheterart, Anlagedatum FROM dbo.patients INNER JOIN dbo.cathinsert ON dbo.patients.Patientennummer = dbo.cathinsert.Patientennummer ORDER BY Station ASC, Zimmer ASC"; 
$visdbyes = "SELECT (SELECT VisiteKind FROM dbo.visits WHERE VisiteDate = '$dbyesterday') AS VisiteKind"; 
$visyes = "SELECT (SELECT VisiteKind FROM dbo.visits WHERE VisiteDate = '$yesterday') AS VisiteKind"; 
$vistod = "SELECT (SELECT VisiteKind FROM dbo.visits WHERE VisiteDate = '$today') AS VisiteKind"; 

$result = sqlsrv_query($connection, $sql); 
$result_vdy = sqlsrv_query($connection, $visdbyes); 
$result_vy = sqlsrv_query($connection, $visyes); 
$result_vt = sqlsrv_query($connection, $vistod); 

$data = array(); 

while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)){$data['row'] = $row;} 
while($row = sqlsrv_fetch_array($result_vdy, SQLSRV_FETCH_ASSOC)) {$data['dby'] = $row;} 
while($row = sqlsrv_fetch_array($result_vy, SQLSRV_FETCH_ASSOC)) {$data['yes'] = $row;} 
while($row = sqlsrv_fetch_array($result_vt, SQLSRV_FETCH_ASSOC)) {$data['tod'] = $row;} 

echo ("<tr class=\"clickable-row\" data-href=\"visitact.php?Patientennummer=".$row["Patientennummer"]."\">"); 
echo ("<td>".$data['row']["Station"]."</td>"); 
echo ("<td>".$data['row']["Patientennummer"]."</td>"); 
echo ("<td>".$data['row']["Zimmer"]."</td>"); 
echo ("<td>".$data['row']["Vorname"]." ".$data['row']["Nachname"]."</td>"); 
echo ("<td>".$data['row']["Katheterart"]."</td>"); 
echo ("<td>".$data['row']["Anlagedatum"]."</td>"); 
echo ("<td>".$data['dby']["VisiteKind"]."</td>"); //vorgestern 
echo ("<td>".$data['yes']["VisiteKind"]."</td>"); // gestern 
echo ("<td>".$data['tod']["VisiteKind"]."</td>"); //heute 
        ?> 

     </table> 
    </div> 
</div> 
</body> 
</html> 

我跳你可以幫忙! 由於提前,

德克

+0

那麼您期望什麼?您可以獨立地遍歷每個結果。最後你只有最後的價值。 –

+0

也許我需要清楚:dbo.patients包含每個病人的一套信息,每個人都只有一行。此外,我必須每天拜訪一次,並將這些信息保存在dbo.visits上。每天都有一堆新的信息存儲在那裏,同一個PatientID,但是這裏有多個信息(每天一個)。現在我需要從最近3天的dbo.visits中顯示「VisiteKind」列 - 而tgis是我無法實現的,因爲上面的代碼發佈了PatientInformation,最後3天是正確的 - 但僅適用於dbo中的第一個患者。耐心。 –

+0

您只將結果分配給循環中的相同變量。最後,您_once_打印被多次覆蓋的變量的內容,現在只包含最後的結果。你應該在這些表之間使用'join'並處理結果集 – Psi

回答

0

我認爲你應該使用一個查詢每天,然後檢查日期在while循環。您還可以減少$ data數組中的'VisiteKind'字段:

$visd = "SELECT VisiteKind FROM dbo.visits"; 
$result_v = sqlsrv_query($connection, $visd); 
$data = ['dby'=> [], 'yes'=> [], 'tod'=> []]; 
while($row = sqlsrv_fetch_array($result_v, SQLSRV_FETCH_ASSOC)) { 
    switch($row['VisiteKind']){ 
     case $dbyesterday: 
      array_push($data['dby'],$row['VisiteKind']); 
      break; 
     case $yesterday: 
      array_push($data['yes'],$row['VisiteKind']); 
      break; 
     case $today: 
      array_push($data['tod'],$row['VisiteKind']); 
      break; 
    } 
} 
相關問題