簡體   English   中英

使用AJAX從MySQL數據庫更新PHP頁面:用於計算最近添加的數據的算法

[英]Updating PHP page from MySQL database using AJAX: Algorithm to calculate recently added data

摘要

我創建了一個PHP頁面,該頁面顯示MySQL表中的數據。 該表通過我編寫的python udp偵聽器自動將數據插入其中,並且bash腳本每20秒廣播一次數據。

每當將新結果插入數據庫時​​,我都想使用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整數的值。 因為我希望能夠在兩個文件中使用它,所以將其存儲在$ _SESSION數組中。 我在displaydata.php文件中聲明了變量,並希望在getRecentData.php中訪問它。

我在每個頁面的頂部調用session_start()函數,並使用以下命令聲明變量: $_SESSION['currentHighest'] = mysql_query("SELECT MAX(id) FROM data"); 然后,我嘗試使用以下方法在getRecentData.php文件中訪問它: $currentHighest = $_SESSION['currentHighest'];

作為測試,我然后使用: echo $currentHighest;

從理論上講,我應該認為這將打印出已使用的最大id的值,但目前沒有任何打印內容。 然后,這構成了算法的開始。

現在,我需要使用SELECT MAX(id) FROM data;來計算新的記錄數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 
}

因此,它遞歸地取一個遞增的“ x”,直到NewMax =當前ID。 然后,我需要某種方式來獲取已找到的記錄數,並運行另一個MySQL查詢以獲取新記錄並將其插入頁面。 插入頁面不是問題,我已經完成了一次。

解決方案?

我所描述的只是我如何實現此任務的最初想法。 我正在尋找一種方法,如果這看起來是實現目標的合理方法,我該如何完成? 或者,什么是實現目標的更好方法。 我不是在尋找特定的代碼,除非它有助於解釋,而是在尋找實現目標的理論。 我可以在網上找到代碼。 如果人們不贊成,可以在評論中留下原因,以便我改善問題寫作。 提前致謝。

如果您想查看任何特定的代碼,我都有:

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

如果要立即更新瀏覽器中的數據,最好使用websockets。 解析UDP結果並將這些結果發送到套接字,而不是查詢數據庫。 該庫是一個很好的起點-http: //socketo.me/

您可以運行將UDP數據包作為服務偵聽的PHP腳本。 (例如-在Ubuntu上使用UpStart)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM