我正在編寫一個web應用程序,它應該在搜索查詢中顯示非常大的結果。 說一些查詢將返回10.000項。 我想將這些顯示給用戶分頁;到目前爲止沒有問題:每個頁面將是帶有適當的LIMIT語句的查詢的結果。 但我想在分頁查詢的每個頁面中顯示結果的線索:來自第一個項目的一些數據和來自最後一個的一些數據。 這意味着,例如,與10.000項目的結果和50項的頁面大小,如果用戶要求的第一頁,我將需要:sql查詢得到一個不連續的結果子集
- 第50項(被請求的頁面用戶)
- 項目51和100(第一和最後的第二頁的)
- 項目101和151
等
對於我想避免一個查詢磷效率的原因呃排。
[編輯]我也寧願不下載10.000的結果,如果我只需要50 +五十零分之萬* 2 = 400
的問題是:是否有一個查詢我可以發出到RDBMS(MySQL的,順便說一下,但我更喜歡cross-db解決方案),它只會返回我需要的數據?
我不能使用服務器端遊標,因爲並不是所有的dbs都支持它,我希望我的應用程序可以與數據庫無關。
對不起,誤解你的問題(早晨咖啡還在醞釀之中)。我會調整我的答案。 – 2010-02-17 11:36:34
好點:這將最大限度地減少對使用的數據庫的依賴:只有限制語法將不得不進行調整。 分頁邏輯需要非標準功能。每當我偶然發現這一點,我真的很驚訝:這樣一個基本的構造怎麼能不被標準化呢? – silviot 2010-02-17 13:20:41
這裏的問題是查詢不能被參數化。如果我想要100頁的話呢?或者如果我想要第100頁以及上一頁和下一頁?然後你必須立即創建SQL。 – 2010-02-17 13:25:39