使用AJAX从MySQL数据库更新PHP页面:计算最近添加数据的算法 总结
我创建了一个显示MySQL表数据的PHP页面。这个表通过我编写的python udp侦听器和每20秒广播一次数据的bash脚本自动插入数据 我希望在将新结果插入数据库时使用AJAX显示新结果,而用户无需刷新页面。我已经实现了一个ajax特性,它允许用户在文本框中键入他们希望看到的结果数量。然后,我使用使用AJAX从MySQL数据库更新PHP页面:计算最近添加数据的算法 总结,php,mysql,ajax,algorithm,Php,Mysql,Ajax,Algorithm,我创建了一个显示MySQL表数据的PHP页面。这个表通过我编写的python udp侦听器和每20秒广播一次数据的bash脚本自动插入数据 我希望在将新结果插入数据库时使用AJAX显示新结果,而用户无需刷新页面。我已经实现了一个ajax特性,它允许用户在文本框中键入他们希望看到的结果数量。然后,我使用onkeyup=“LOADXMLDoc()”调用了AJAX函数。(LOADXMLDoc()是处理所有AJAX的函数) 我提供的代码并不是专门用语言编写的,它只是一种传达想法的方式 目标 这里的最终目
onkeyup=“LOADXMLDoc()”
调用了AJAX函数。(LOADXMLDoc()是处理所有AJAX的函数)
我提供的代码并不是专门用语言编写的,它只是一种传达想法的方式
目标
这里的最终目标是让PHP页面显示来自MySQL数据库的实时数据。我遇到的困难是只检索最新数据所需的算法
文件夹
- Displaydata.php 包含用户看到的页面、文本框和查看数据的窗口
- getData.php 包含连接到数据库的代码,以及根据用户规范查询结果的代码
- getRecentData.php 这就是获取最新数据所需的算法所在
- 每秒扫描一次数据库(例如)
- 计算是否已添加任何新文件
- 使用任何新文件更新网页,但仅使用新数据。我不希望不必要的数据被上传到页面上
- 在displaydata.php中循环函数()调用 我发现这是一个更干净的方法,但是如果只调用一次函数,它会继续运行吗
- 最后一种方法是使用javascript SetTimeout()函数 对我来说,这似乎是迄今为止最干净的方法,但我愿意接受任何其他解决方案
$\u session['currentHighest']=mysql_query(“从数据中选择MAX(id))代码>
然后我尝试在getRecentData.php文件中使用:$currentHighest=$\u SESSION['currentHighest']代码>
作为测试,我使用:echo$currentHighest代码>
理论上,我认为这会打印出所使用的最大id的值,但目前,没有打印任何内容。这就构成了算法的开始
现在我需要使用selectmax(id)fromdata计算新记录的数量再次输入code>和$currentHighest变量。我当前的方法看起来有点像这样:
var x = 0;
var NewMax = ("SELECT MAX(id) FROM data");
Do until newMAX(id) = currentHighest {
sleep(1000);
NewMax = NewMax - x
x += 1
}
因此,这会递归地去掉递增的“x”,直到NewMax=current ID。然后,我需要某种方法来获取已找到的记录数,并运行另一个MySQL查询来获取新记录并将其插入页面。插入页面不是问题,我已经做过一次了
解决方案是什么?
我所描述的只是我对如何完成这项任务的初步想法。我正在寻找其中之一,如果这似乎是实现我的目标的合理方式,我该如何完成它?或者,实现目标的更好方式是什么。我不是在寻找具体的代码,除非它有助于解释,而是如何实现目标的理论。我可以在网上找到代码。如果有人投了反对票,你能在评论中留下一个理由吗?这样我就可以改进我的问题写作了。提前谢谢
如果您希望查看我的任何特定代码:
如果您希望立即更新浏览器中的数据,最好使用WebSocket。解析UDP结果并将这些结果发送到套接字,而不是查询数据库。这个图书馆是一个很好的起点-
您可以运行PHP脚本作为服务侦听UDP数据包。(例如,在Ubuntu上使用UpStart)
Do while BooleanVariable = True {
sleep(1);
//Execute the algorithm to fetch recent data.
}
Do while BooleanVariable = True {
SetTimeout(LOADXMLDoc2(), 1000) //Run function every second
}
var x = 0;
var NewMax = ("SELECT MAX(id) FROM data");
Do until newMAX(id) = currentHighest {
sleep(1000);
NewMax = NewMax - x
x += 1
}