我想在我的php文件中更新我生成的表,只有在数据库表中有更改但我不知道如何执行此操作时。在阅读了所有类似的问题后,我仍然无法理解我应该做的事情。
我在main.php
中的div<div id="table_holder" class="table-responsive" style="height: 300px;"></div>
中显示我的表格
这是我每隔5秒刷新一次表的JS。
<script type="text/javascript">
$(document).ready(function(){
refreshTable();
});
function refreshTable(){
$('#table_holder').load('live_table_data.php', function(){
setTimeout(refreshTable, 5000);
});
}
</script>
这是我在 live_data_table.php
中显示我的表格的方式$result = $conn->query("select date,student_id, s.s_name as Name, s.s_lname as Last, s.s_email as Email, time from attendance_record A
inner join student s on A.student_id = s.s_id
inner join session b on A.session_id = b.session_id
where b.module_id = 7 and A.date = '2017-03-20' and b.start_time = '16:00'");
?>
<table class="table-responsive" id="live_table">
<thead>
<tr >
<th>Student ID</th>
<th>Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Arrival</th>
<th>Date</th>
</tr>
</thead>
<tbody style="overflow: auto">
<?php
while ($row = $result->fetch_assoc()) {
unset($student_id, $Name, $Last, $Email, $time, $date);
$student_id = $row['student_id'];
$Name = $row['Name'];
$Last = $row['Last'];
$Email = $row['Email'];
$time = $row['time'];
$date = $row['date'];
echo "<tr>";
echo "<td>".$student_id."</td>";
echo "<td>".$Name."</td>";
echo "<td>".$Last."</td>";
echo "<td>".$Email."</td>";
echo "<td>".$time."</td>";
echo "<td>".$date."</td>";
echo "</tr>";
}
?>
</tbody>
</table>
我的问题是,我不知道如何根据if和动态更新表格,只有在数据库中有变更时
答案 0 :(得分:0)
要知道您的桌子上是否有修改,我可以想到:
可能还有其他一些方法可以做到这一点。
答案 1 :(得分:0)
您无法在不从前端发送请求的情况下更新浏览器中的内容。但是你可以最小化这个过程。只需创建php脚本,它将输出状态并生成json。 为了使PHP脚本易于理解,当表更新时,何时更新,使用哈希summ。
data-hash="<some hash>"
添加到表格标记中。然而,也许它不值得,你最好保持原样。
答案 2 :(得分:0)
通常人们不会做你想做的事情,因为做一个可以判断是否有任何改变的查询需要与原始查询相同的资源量。因此,最好的解决方案可能是在固定的时间间隔内重复查询,就像每分钟一样。
但是如果你有一个非常繁重的查询,你希望减少它的完成次数,你可以执行以下操作:
由于传统的关系数据库没有事件驱动方面,唯一的方法是对固定时间间隔内的更改进行轮询。所以这要在应用程序级别上解决,即:每次修改数据时,都会使用当前日期时间更新数据库中的某些内容。有很多可能性:
您可以在last_modified
表中添加student
字段,每次代码添加或修改记录时,都会设置当前时间。然后,您可以仅查询已修改的记录,或通过以下方式检查最新的修改时间:
select
max(`last_modified`)
from
`student`
您可以创建一个单独的表,其中包含您要跟踪的每个表的记录。每次您的代码添加或修改学生时,它都会设置学生表的当前时间。
insert into
`track_updates`
(`table_name`, `time`)
values
("student", "2017-03-21 12:59:00")
on duplicate key update
`time` = "2017-03-21 12:59:00"
然后按表格查询:
select
`time`
from
`track_updates`
where
`table_name` = "student"
您甚至可以拥有一张始终包含单条记录的表格,其中包含所有相关表格的上次更新时间的单个字段。
您可以使用以下技术提高这些类型的轮询效率:https://en.wikipedia.org/wiki/Comet_%28programming%29
答案 3 :(得分:0)
根据许多人的推荐,我决定采用不同的路线,每隔5秒就消除一次刷新表,而是设置一个按钮来刷新表中的行数。
<button type="button" onClick="refreshTable()">Refresh</button>
<div id="table_holder" class="table-responsive" style="height: 300px;"></div>
<script type="text/javascript">
$(document).ready(function(){
refreshTable();
});
function refreshTable(){
$('#table_holder').load('live_table_data.php')};