排序的列不是唯一值的時候如何分頁獲取?
資料庫是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的朋友指點一下,謝謝
相關文章
- js如何獲取陣列中的最大值JS陣列
- Flutter 如何獲取裝置的唯一碼Flutter
- js如何獲取指定陣列元素在陣列中的索引值JS陣列索引
- JavaScript獲取table表格指定列的值JavaScript
- 在cs頁面獲取input的值方法
- 如何獲取變數token的值變數
- 如何獲取變數 token 的值變數
- 如何獲取cookie值Cookie
- Dockerfile生成映象的時候是如何快取的?Docker快取
- jQuery如何獲取指定元素的索引值jQuery索引
- javascript如何獲取url傳遞的值JavaScript
- 如何獲取Android唯一標識(唯一序列號)Android
- 介面測試的時候如何一鍵獲取 cookie, 並在其他介面引用?Cookie
- js獲取 陣列最大/小值JS陣列
- js如何獲取網頁的標題JS網頁
- 獲取陣列中子串乘積的最大值陣列
- js獲取陣列元素中的最大值和最小值JS陣列
- SQL Server 怎麼在分頁獲取資料的同時獲取到總記錄數SQLServer
- SQL Server在分頁獲取資料的同時獲取到總記錄數的兩種方法SQLServer
- JS獲取瀏覽器位址列的多個引數值的任意值JS瀏覽器
- 關於陣列的物件獲取及排序問題/小程式的多層頁面返回問題陣列物件排序
- JavaScript 獲取陣列中最大值JavaScript陣列
- 新版POI如何獲取日期型別的cell的值型別
- JavaScript獲取css的值JavaScriptCSS
- JavaScript獲取陣列最大值和最小值JavaScript陣列
- javascript如何獲取屬性值JavaScript
- layui獲取頁面checkbox核取方塊值UI
- Ext.grid.GridPanel載入列時怎麼獲取另外一列的值?
- [windows]批處理獲取時間的long型值Windows
- javascript如何獲取url傳遞的引數值JavaScript
- request.getParameter("name")什麼時候獲取的引數是null,什麼時候為""空字串Null字串
- JS陣列遍歷和獲取陣列最值JS陣列
- js獲取陣列的最大值和最小值程式碼例項JS陣列
- python獲取頁面亂碼時的處理Python
- PHP獲取陣列最後一個值PHP陣列
- javascript如何獲取當前網頁的url地址JavaScript網頁
- js如何獲取元素在頁面中的位置JS
- js獲取數字陣列最大值的幾種方式JS陣列