帶置頂的分頁SQL

昨天幫朋友處理一個帶置頂的分頁頁面。

數據庫:Access
方法:在文章表中增加一個是否置頂字段:A_IsTop(Boolean),將A_IsTop和格式化爲“0000000000”的字段組合在一塊後再以倒序方式排序

SQL語句如下:

Sub OpenData()
	'On Error Resume Next
	Conn.Open "provider=microsoft.jet.oledb.4.0;data source=" & server.mappath(db)
	If Err.Number<>0 Then
		Response.Write "用戶數據庫連接失敗!請聯繫管理員解決!"
		Response.End()
	End If
End Sub

Sub CloseConn()
	Conn.Close
	Set Conn=nothing
End Sub

Sub creatobj(obj) '建立recordset對象
	set obj=server.CreateObject("adodb.recordset")
End sub
sub clearobj(obj)
	if Lcase(typename(obj))="recordset" then
		obj.close
		set obj=nothing
	end if
end sub


nPageSize=10 '每頁顯示條數
pageno=request("pageno")
If Not IsNumeric(PageNo) or isEmpty(PageNo) Then
	PageNo=1
End If
if PageNo<1 Then PageNo=1

pageno=clng(pageno)
Call OpenDatabase()  '打開數據庫
Call CreatObj(rs)    '建立遊標

'統計文章總數
Sql="Select Count(*) As zs From Article"
rs.open sql,conn,1,1
rsCount=rs("zs")
rs.close
'計算總頁數
PageAll=(rsCount-(rsCount mod nPageSize))/nPageSize
if (rsCount mod nPageSize)>0 then PageAll=PageAll+1
if PageAll=0 then PageAll=1
if Pageno>pageall then pageno=PageAll


Sql="Select Top "& nPageSize &" * From Article " & _
    "Where (Cstr(abs(a_istop))+format(cstr(id),'0000000000'))<=(" & _
    "Select Iif(IsNull(Min(n.ID)),0,Min(n.ID)) From (" & _
    "Select Top "& (Cint(PageNo)-1)*nPageSize+1 &" cstr(abs(a_istop))+format(cstr(id),'0000000000') as ID From Article Order by cstr(abs(a_istop))+format(cstr(id),'0000000000') Desc" & _
    ") n" & _
    ") Order By cstr(abs(a_istop))+format(cstr(id),'0000000000') Desc"

rs.open sql,conn,1,1

'輸出查詢到的文章列表

Call ClearObj(rs) '清除rs遊標
Call CloseConn()  '關閉數據庫

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章