【发布时间】: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