排序的列不是唯一值的時候如何分頁獲取?
資料庫是SQL Server2000
當排序值是唯一值,就是按照順序遞增的時候比較好辦
例如,按照datetime排序
上面這種演算法是先獲取前一頁的最小值,然後獲取比最小值還小的所有資料,然後獲取前n個,就是當前頁的資料;
這種演算法要求排序值必須遞增/遞減
但是有些資訊的排序值有可能相等,例如商品的價格;要按照商品價格排序就不能利用上面的演算法了;
我現在是用最笨的辦法;
上面這種演算法是先獲取前N頁的所有資料,把前N-1也的資料排除掉
這種演算法在資料量比較少的時候還可以用
但是當資料量非常大的時候,例如有100W條的時候,要獲取最後一頁,那麼while要迴圈差不多100W次,這樣肯定不行的!
請各位jdon的朋友指點一下,謝謝
當排序值是唯一值,就是按照順序遞增的時候比較好辦
例如,按照datetime排序
//page:第幾頁,從第一頁開始 //pageSize:每頁多少資料 public Vector getMsgAsPage(int page, int pageSize) { Vector rs = null; String sql = ""; if (page == 1) { //當獲取第一頁記錄的時候不能使用下面的SQL語句 sql = "select top " + pageSize + " * from info order by datetime DESC"; } else { sql = "SELECT TOP " + pageSize + " * FROM info WHERE (datetime <(SELECT MIN(datetime ) FROM " + "(SELECT TOP " + (page - 1) * pageSize + " datetime FROM info ORDER BY datetime DESC) AS TempTable)) " + " ORDER BY datetime DESC"; } } ................... <p class="indent"> |
上面這種演算法是先獲取前一頁的最小值,然後獲取比最小值還小的所有資料,然後獲取前n個,就是當前頁的資料;
這種演算法要求排序值必須遞增/遞減
但是有些資訊的排序值有可能相等,例如商品的價格;要按照商品價格排序就不能利用上面的演算法了;
我現在是用最笨的辦法;
//page:第幾頁,從第一頁開始 //pageSize:每頁多少資料 public Vector getProduceAsPage(int page, int pageSize) { Vector rs = null; String sql = ""; sql = "select top " + pageSize*pageSize + " * from info order by datetime DESC"; } conn = ds.getConnection(dbsource, dburl, username, password); stmt = conn.createStatement(); ResultSet result = stmt.executeQuery(sql); int t=0 while (result.next()) { if(t>=pageSize*(page-1)){ ProduceDTO p=new ProduceDTO(); p.setId(result.getString("id")); .... rs.add(p); } t++ } ................... <p class="indent"> |
上面這種演算法是先獲取前N頁的所有資料,把前N-1也的資料排除掉
這種演算法在資料量比較少的時候還可以用
但是當資料量非常大的時候,例如有100W條的時候,要獲取最後一頁,那麼while要迴圈差不多100W次,這樣肯定不行的!
請各位jdon的朋友指點一下,謝謝
相關文章
- Lavarel Ajax 分頁時 獲取分頁資訊
- 列印網頁的時候,如何讓指定的元素另起一頁(列印分頁)?網頁
- Flutter 如何獲取裝置的唯一碼Flutter
- JavaScript獲取table表格指定列的值JavaScript
- 如何獲取變數token的值變數
- 如何獲取變數 token 的值變數
- JS 獲取陣列物件的值&提取Object的valueJS陣列物件Object
- 介面測試的時候如何一鍵獲取 cookie, 並在其他介面引用?Cookie
- 關於陣列的物件獲取及排序問題/小程式的多層頁面返回問題陣列物件排序
- js獲取 陣列最大/小值JS陣列
- JS獲取瀏覽器位址列的多個引數值的任意值JS瀏覽器
- SQL Server 怎麼在分頁獲取資料的同時獲取到總記錄數SQLServer
- SQL Server在分頁獲取資料的同時獲取到總記錄數的兩種方法SQLServer
- layui獲取頁面checkbox核取方塊值UI
- Python教程:如何獲取顏色的RGB值Python
- python獲取頁面亂碼時的處理Python
- JavaScript 獲取陣列中最大值JavaScript陣列
- JavaScript獲取css的值JavaScriptCSS
- JavaScript獲取陣列最大值和最小值JavaScript陣列
- Prometheus 告警恢復時,怎麼獲取恢復時的值?Prometheus
- JS陣列遍歷和獲取陣列最值JS陣列
- python中獲取如何Series值Python
- Golang獲取int陣列裡的最大值和下標Golang陣列
- js獲取數字陣列最大值的幾種方式JS陣列
- PHP獲取陣列最後一個值PHP陣列
- MaxCompute如何對SQL查詢結果實現分頁獲取SQL
- pbootcms獲取結果頁面的搜尋keyword值和tag值boot
- 二維陣列的獲取陣列
- JDBC獲取表的列數JDBC
- 夢想cad在網頁開發時如何獲取圖層操作的資訊網頁
- 使用 chunkById 方法的時候請不要進行排序排序
- 裝置唯一標識方法(Unique Identifier):如何在 Windows 系統上獲取裝置的唯一標識IDEWindows
- Espresso 如何獲取控制元件的實時文字?Espresso控制元件
- android開發中如何動態獲取listview中的item的值AndroidView
- golang什麼時候應該把方法繫結在struct的值上而不是指標上?GolangStruct指標
- C#中如何獲取二維陣列的行數和列數?C#陣列
- 使用 Carbon 獲取指定時間範圍內的日期陣列陣列
- js_獲取css的@media screen的值JSCSS
- DevExpress中獲取GridControl排序之後的ListdevExpress排序