史上最強的資料分頁方法 (轉)

amyz發表於2007-11-28
史上最強的資料分頁方法 (轉)[@more@]

看到前輩們無數的分頁方法,其中奇淫技巧不盡有之,其中之最當屬這篇帖子
/develop/Read_Article.?Id=18627">http://www.csdn.net/develop/Read_Article.asp?Id=18627分頁方法為之最,令我等菜鳥不盡畏然
我觀前輩的帖子,皆由於的大不一致,且,ACCESS等菜鳥級資料庫沒有如rowid,_n_,obs等之類的輔助列,空有BETWEEN運算子而無用武之地,
又無如except之類的資料集運算子,真是令無數英雄盡折腰

偶詳觀各資料庫SQL,得出是資料庫就有取前面N條記錄的SQL語法,如什麼 top n*****之類的語法,而資料分頁的關鍵問題是取後N條記錄的語法
偶深思良久,最後小悟,故出此言,還忘前輩們多多指點

取記錄集後N條記錄的大法:
假設
 1.有一sql語句將產生1000條記錄 (select 唯一ID,其他欄位 from 表集 where 條件 order by 排序)
 2.每頁顯示20條記錄
 3.當前顯示第5頁

實現如下:
 select * from
 (
 select * from (select top 20*4 唯一ID,其他欄位 from 表集 where 條件 order by 排序) as a
 union all
 select * from (select top 20*5 唯一ID,其他欄位 from 表集 where 條件 order by 排序) as b
 )
 a
 group by 唯一ID,其他欄位 having count(唯一ID)=1  order by 排序


 
執行此SQL,至此取記錄集後N條記錄大法就些完畢

詳細說明:

  此SQL語句的關鍵應用技巧在於union all和分組上的條件過濾語句

大家可以根據此技巧完全可以做出一個通用的分頁方法,如直接由傳入sqlstr(sql語句),NumPerPage(每頁顯示數),currpage(當前頁),自己在再內組織成通成的SQL分頁語句

備註:
當前頁為1的話就不需要執行該SQL了,直接TOP一下就OK了
由於沒有環境,該SQL無法測試,但相信不會低效
執行平臺在access,sqlserver上都可執行,其它資料庫平臺只需改top關鍵字應該就可以就地執行了


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-985665/,如需轉載,請註明出處,否則將追究法律責任。

相關文章