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

时间:2014-08-20 12:43:45

标签: php mysql ajax algorithm

摘要

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

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

我提供的代码没有特定的语言,它只是一种了解这个想法的方法。

目标

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

文件

  • Displaydata.php

      

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

  • 访问getdata.php

      

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

  • getRecentData.php

      

    这是我需要获取最新数据的算法。

算法

我需要算法:

  • 每秒扫描一次数据库(例如)。
  • 计算是否添加了任何新文件。
  • 使用任何新文件更新网页,但新数据。我不希望将不必要的数据上传到页面上。

到目前为止我有什么

重复扫描

为了扫描数据库,我提出了3种方法:

  • displaydata.php

    中循环调用function()
    Do while BooleanVariable = True {
      <?php sleep(1); ?>
      LOADXMLDoc2(); //The LOADXMLDoc2() is just the same as the previous one but for this AJAX request, just an example name for now.
    }
    

    就个人而言,我发现这种方法非常混乱,我认为它不会起作用。

  • 调用该函数时,循环 GetRecentData.php

    中的整个代码
    Do while BooleanVariable = True {
      sleep(1);
      //Execute the algorithm to fetch recent data.
    }
    

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

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

    Do while BooleanVariable = True {
      SetTimeout(LOADXMLDoc2(), 1000)  //Run function every second
    } 
    

    对我来说,这似乎是迄今为止最干净的方法,但我对任何其他解决方案都持开放态度。

计算新记录的存在

我开始创建一个名为$ currentHighest的变量,而不是自我解释,我希望这个变量包含当前使用的最大id整数的值。因为我希望能够在2个文件中使用它,所以我将它存储在$ _SESSION数组中。我在 displaydata.php 文件中声明了该变量,并希望在 getRecentData.php 中访问它。

我在每个页面的顶部调用session_start()函数,并使用以下代码声明变量:$_SESSION['currentHighest'] = mysql_query("SELECT MAX(id) FROM data"); 然后我尝试使用以下方法在 getRecentData.php 文件中访问它:$currentHighest = $_SESSION['currentHighest'];

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

理论上,我认为会打印出已经使用过的最大内存的值,但是目前还没有打印出任何内容。然后,这将形成算法的开始。

现在我需要再次使用SELECT MAX(id) FROM data;和$ currentHighest变量来计算新记录的数量。我目前的方法看起来有点像这样:

var x = 0;
var NewMax = ("SELECT MAX(id) FROM data");
Do until newMAX(id) = currentHighest {
  sleep(1000);
  NewMax = NewMax - x
  x += 1 
}

所以这递归地取消了递增的&#34; x&#34;直到NewMax =当前ID。然后,我需要一些方法来获取已找到并运行另一个MySQL查询的记录数,以获取新记录并将其插入到页面中。插入页面不是问题,我已经做过一次了。

解决方案?

我所描述的只是我对如何完成这项任务的初步想法。我正在寻找,如果这似乎是实现我的目标的合理方式,我该如何完成它?或者,什么是实现目标的更好方法。我不是在寻找特定的代码,除非它有助于解释,而是如何实现目标的理论。我可以在网上找到代码。如果人们投票不好,你能否在评论中留下理由,那么我可以改进我的写作问题。提前谢谢。

如果您想查看我拥有的任何特定代码:

https://gist.github.com/edprince/e3af255d57283b4f820e

1 个答案:

答案 0 :(得分:1)

如果您希望立即更新浏览器中的数据,最好使用websockets。而不是查询数据库,解析UDP结果并将结果发送到套接字。这个图书馆是一个很好的起点 - http://socketo.me/

您可以运行侦听UDP数据包作为服务的PHP脚本。 (例如 - 在Ubuntu上使用UpStart)。