Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用AJAX从MySQL数据库更新PHP页面:计算最近添加数据的算法 总结_Php_Mysql_Ajax_Algorithm - Fatal编程技术网

使用AJAX从MySQL数据库更新PHP页面:计算最近添加数据的算法 总结

使用AJAX从MySQL数据库更新PHP页面:计算最近添加数据的算法 总结,php,mysql,ajax,algorithm,Php,Mysql,Ajax,Algorithm,我创建了一个显示MySQL表数据的PHP页面。这个表通过我编写的python udp侦听器和每20秒广播一次数据的bash脚本自动插入数据 我希望在将新结果插入数据库时使用AJAX显示新结果,而用户无需刷新页面。我已经实现了一个ajax特性,它允许用户在文本框中键入他们希望看到的结果数量。然后,我使用onkeyup=“LOADXMLDoc()”调用了AJAX函数。(LOADXMLDoc()是处理所有AJAX的函数) 我提供的代码并不是专门用语言编写的,它只是一种传达想法的方式 目标 这里的最终目

我创建了一个显示MySQL表数据的PHP页面。这个表通过我编写的python udp侦听器和每20秒广播一次数据的bash脚本自动插入数据

我希望在将新结果插入数据库时使用AJAX显示新结果,而用户无需刷新页面。我已经实现了一个ajax特性,它允许用户在文本框中键入他们希望看到的结果数量。然后,我使用
onkeyup=“LOADXMLDoc()”
调用了AJAX函数。(LOADXMLDoc()是处理所有AJAX的函数)

我提供的代码并不是专门用语言编写的,它只是一种传达想法的方式

目标 这里的最终目标是让PHP页面显示来自MySQL数据库的实时数据。我遇到的困难是只检索最新数据所需的算法

文件夹
  • Displaydata.php

    包含用户看到的页面、文本框和查看数据的窗口

  • getData.php

    包含连接到数据库的代码,以及根据用户规范查询结果的代码

  • getRecentData.php

    这就是获取最新数据所需的算法所在

算法 我需要算法来:

  • 每秒扫描一次数据库(例如)
  • 计算是否已添加任何新文件
  • 使用任何新文件更新网页,但仅使用新数据。我不希望不必要的数据被上传到页面上
到目前为止我所拥有的 重复扫描 为了扫描数据库,我想出了3种方法:

  • 在displaydata.php中循环函数()调用

    我发现这是一个更干净的方法,但是如果只调用一次函数,它会继续运行吗

  • 最后一种方法是使用javascript SetTimeout()函数

    对我来说,这似乎是迄今为止最干净的方法,但我愿意接受任何其他解决方案

计算新记录的存在 我首先创建了一个名为$currentHighest的变量,这是自解释的,我希望这个变量包含当前使用的最大id整数的值。因为我希望能够在其中两个文件中使用它,所以我将它存储在$\u会话数组中。我在displaydata.php文件中声明变量,并希望在getRecentData.php中访问它

我调用每个页面顶部的session_start()函数,并使用以下命令声明变量:
$\u session['currentHighest']=mysql_query(“从数据中选择MAX(id))
然后我尝试在getRecentData.php文件中使用:
$currentHighest=$\u SESSION['currentHighest']

作为测试,我使用:
echo$currentHighest

理论上,我认为这会打印出所使用的最大id的值,但目前,没有打印任何内容。这就构成了算法的开始

现在我需要使用
selectmax(id)fromdata计算新记录的数量和$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 
}