2011-11-21 54 views
0

人們通過他們提交的表單進入結果頁面。通過Jquery將信息從數據庫中抓取並呈現給用戶。分頁和jQuery

在'結果'頁面上,用戶可以做出額外的選擇來影響他們的結果(類似於比較網站)。任何更改將通過jquery查詢後端數據庫。

現在我想添加一個分頁到結果頁面。在我的選擇中,我有兩種選擇(如果我錯過了選項,請糾正我),但我不確定哪一個是最佳選擇。 這兩個選項都會將當前頁面(或選定頁面)通過jquery提交到後端,以確保我們選擇正確的結果。

選項1)
執行相同的查詢結果頁面上的後端來定義所需的頁數。

  • :易於實現
  • 精讀:查詢

選項2)重複
執行在後臺查詢,並通過傳遞頁的背面的數量jquery/JSON以及結果頁上的信息

  • :在同一個地方
  • 精讀:這可能嗎?將發送類似: {result_info: data_array, pages: page_array}

會是怎樣來實現分頁的結果頁面的最佳選擇?

+0

「後端」和「結果頁面」有什麼區別? –

+1

順便說一句,有一個很酷的jQuery插件可以做到這一點,你應該看看http://datatables.net/ –

+1

解決方案可能是數據庫特定的。你使用什麼數據庫引擎?通常最好在數據庫中處理分頁,大大減少數據被髮回給用戶並提供更好的性能。 – Chris

回答

0

最好的選擇是設置PHP後端頁面來執行兩個查詢。首先確定有多少個條目,然後選擇一個SELECT ... LIMIT一次拉出一個頁面。

所以基本後端查詢可能是這樣的:

$page = $_GET['page']; 
$page = intval($page); //Clean the input 
$pageSize = 10; //get 10 results per page 

$sql = "SELECT COUNT(*) as count FROM tbl_name"; 
$resultCount = mysql_query($sql); 

$count = mysql_fetch_assoc($resultCount); 
$count = $count['count']; 

//Build your query, including LIMIT 
$sql = "SELECT * FROM tbl_name LIMIT " . $page * $pageSize . ", " . $pageSize; 
$results = mysql_query($sql); 

//process $results and append the $count value to the JSON returned 

如果您檢查SELECT http://dev.mysql.com/doc/refman/5.0/en/select.html MySQL文檔,我認爲極限是什麼會有所幫助。

減少從數據庫返回的記錄數將提供最佳性能。特別是如果數據庫託管在網絡上。

在結果方面,您可以獲取傳遞的$ count值,您可以將其除以每頁所需的結果數,然後會告訴您有多少頁。

然後,您的jQuery AJAX調用可以請求例如backend.php?page = 2。

+0

您可能想要將COUNT(*)更改爲列名COUNT(id),但它是一個通用解決方案。 – Chris

+0

感謝您的幫助。該查詢對我來說是已知的。這對我來說更是一個問題,與Jquery結合使用的最佳選擇是什麼。似乎是使用'後端'選項來計算頁面的。你知道是否有可能通過建議的選項通過JSON/jQuery發送兩個變量? – Ralf

+0

是的,您可以構建自己的JSON字符串並簡單地回顯它。 AJAX調用將接收從.php腳本輸出的任何內容。這裏有幾個用於構建JSON代碼的有用鏈接。 http://www.json.org/這是JSON標準並描述了什麼是有效的。 http://jsonlint.com/這是一個JSON驗證器。 – Chris

0

你不應該把未經過濾的GET參數放到sql查詢中。這使得sql注入成爲可能。您應該在$頁上至少創建一個intval()。

+0

沒錯,謝謝你的收穫。 – Chris