带置顶的分页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()  '关闭数据库

 

 

 

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