明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP學(xué)習(xí):史上最強(qiáng)的數(shù)據(jù)分頁方法

[摘要]我觀前輩的帖子,皆由于數(shù)據(jù)庫的SQL大不一致,且SQL SERVER,ACCESS等菜鳥級數(shù)據(jù)庫沒有如rowid,_n_,obs等之類的輔助列,空有BETWEEN運(yùn)算符而無用武之地,又無如excep...

我觀前輩的帖子,皆由于數(shù)據(jù)庫的SQL大不一致,且SQL SERVER,ACCESS等菜鳥級數(shù)據(jù)庫沒有如rowid,_n_,obs等之類的輔助列,空有BETWEEN運(yùn)算符而無用武之地,
又無如except之類的數(shù)據(jù)集運(yùn)算符,真是令無數(shù)英雄盡折腰
偶詳觀各數(shù)據(jù)庫SQL,得出是數(shù)據(jù)庫就有取前面N條記錄的SQL語法,如什么select top n*****之類的語法,而數(shù)據(jù)分頁的關(guān)鍵問題是取后N條記錄的語法偶深思良久,最后小悟,故出此言,還忘前輩們多多指點(diǎn)取記錄集后N條記錄的大法:

假設(shè):

1.有一sql語句將產(chǎn)生1000條記錄 (select 唯一ID,其他字段 from 表集 where 條件 order by 排序)
2.每頁顯示20條記錄
3.當(dāng)前顯示第5頁

實(shí)現(xiàn)如下:
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 排序

運(yùn)行此SQL,至此取記錄集后N條記錄大法就些完畢

詳細(xì)說明:

此SQL語句的關(guān)鍵應(yīng)用技巧在于union all和分組上的條件過濾語句

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

備注:

當(dāng)前頁為1的話就不需要運(yùn)行該SQL了,直接TOP一下就OK了
由于沒有環(huán)境,該SQL性能無法測試,但相信不會(huì)低效
運(yùn)行平臺(tái)在access,sqlserver上都可運(yùn)行,其它數(shù)據(jù)庫平臺(tái)只需改top關(guān)鍵字應(yīng)該就可以就地運(yùn)行了(出處:PConline)