2012-09-21 20 views
0

我正在實現一個以分頁格式顯示數據的php頁面。我的問題是這些數據是實時更改的,所以當用戶請求下一頁時,我提交最後一個id並執行查詢,以便實時更改值,從最後一個id順序檢索更多10行。比如我有20行:SQL - mantain排序順序,用於在實時更改時分頁數據

Id 1 col_real_time 5 
Id 2 col_real_time 3 
Id 3 col_real_time 11 

我得到col_real_time升序排列數據,所以結果是

id 2, id 1, id 3 

現在,在實時ID用戶前col_real_time 29 2的變化發送下一頁的請求,用戶現在發送請求下一個結果,因爲id 2現在是29他已經看到它。

我該怎麼辦?

現在,在實時ID 2變化

回答

2

基本上,你必須採取數據的快照,如果你不希望數據出現改變給用戶。這不是您可以在SQL中非常高效地完成的任務,因此我建議您將整個結果集下載到可以跨頁保留的PHP會話變量中。這樣,您可以按需獲取行。有些Javascript小部件可以有效地做同樣的事情,但是如果你有很多數據的話,會把整個結果集發送給客戶端,這是一個壞主意。

這不像純SQL分頁那樣容易,因爲當不再需要清理存儲的var時,您將不得不承擔責任。否則,你會更快地耗盡內存。

+0

我只想回顧前30個實時數據行,然後其他行我可以正常排序(在列id沒有變化)顯示。爲此,您認爲臨時表是很好的解決方案嗎?我可以將30個實時結果存儲在臨時表中,然後正常讀取其他行,而不考慮保存在臨時表中的id,以避免重複。 – paganotti

+0

正如我所說的,使用純SQL進行此操作並不會有效。除了每次用戶點擊頁面時創建數據庫對象的明顯緩慢之外,大多數SQL數據庫都針對寫入讀取進行了優化。此外,沒有我知道的數據庫可以優化或緩存創建對象的查詢,這意味着您的查詢將始終以最可能的速度運行。將數據保存到PHP變量中會更好。 – monitorjbl

+0

我認爲它可能分頁實時保存時間戳的請求第一次加載新的數據,然後下一個頁面請求我可以在發佈數據中發送保存的原始時間戳,所以我得到的SQL行不是最近創建(當前時間>原始時間戳)並考慮在原始時間戳後刪除的行。所以,我得到所有的歷史記錄行。你認爲它在這種模式下工作嗎? – paganotti

2

如果你只有幾頁,你可以:

  1. 保存到會話和頁面超過它,而不是去回 數據庫服務器。

  2. 將它保存到一個JSON對象列表中,並使用Jquery來讀取它,並通過頁面 覆蓋它。

  3. 將它保存到一個臨時表中,該表指示生成時間戳,user_id和session_id以及頁面上的頁面。

相關問題