【问题标题】:Multiple query data into single HTML-Table - only one row returns多个查询数据到单个 HTML 表中 - 仅返回一行
【发布时间】:2017-08-13 11:21:04
【问题描述】:

我想将 4 个查询的结果显示到一个 html 表(SQL Server 2012、PHP、HTML)中。我已经可以显示一个数据库表的结果,但是一旦我开始查询其他 3 个表,它只会从第一个表返回一行。

以下代码只有一个查询并且工作正常 - 它显示了有关患者的多个信息(姓名、站点、房间、导管、个人 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>

希望你能帮忙! 提前致谢,

迪克

【问题讨论】:

  • 那么你期待什么?您独立地迭代每个结果。最后你只有最后一个值。
  • 也许我需要清除:dbo.patients 包含每个患者的一组信息,每个人只有一行。此外,我必须每天访问一次,将这些信息保存在 dbo.visits 中。每天都会在那里存储一组新的信息,相同的 PatientID,但这里有多个条目(每天一个)。现在我需要显示过去 3 天的 dbo.visits 中的“VisiteKind”列 - 而 tgis 是我无法归档的,因为上面的代码确实发布了 PatientInformation 和最近 3 天的权利 - 但仅适用于 dbo 的第一个患者.患者。
  • 您只能将结果分配给循环中的同一个变量。最后,您一次打印该变量的内容,该变量被多次覆盖,现在只包含最后一个结果。您应该在这些表中使用 join 并处理结果集
  • 但是 fetch_array 不会遍历所有行,直到看到 db.patients 的所有行,然后数组变为假,其余的被执行?他们是否可以更改代码以保持原样?因为它实际上工作正常 - 除了它只有一行返回 =)。
  • @Psi:谢谢你的提示。但我不知道,JOIN 如何帮助我。这是因为那些“VisiteKind”有很多值,有时每天一个,有时每天三个(取决于我访问患者的次数),所有这些数据都存储在一个 VisiteDate 中。我真的看不出 JOIN 如何区分这一点并帮助我打印过去 3 天每天最新的 VisiteKind :(.

标签: php html sql-server database


【解决方案1】:

我认为您应该每天使用一个查询,然后在 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;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2015-10-29
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多