数据库分页-3

作者:chilleen 来源:千一网络(原创) 日期:2006-6-2

在方法 B2 中,我们通过在 sql 里取得上一页或下一页的最后或第一条记录 id 来确定当前页的 id 范围,那么是不是可以作些优化呢,我们命名为 B3。

'当要显示的页面页次 > 1 时。
sql = "select top " & pageSize & " * from tbl where id<" & CLng(request.QueryString("id")) order by id desc"
rs.Open sql, conn, 1, 1
dim lastid
do while not rs.eof
    lastid = rs("id")
    rs.MoveNext
loop
rs.Close
response.Write("<a href='?id=" & lastid & "'>下一页</a>")

注:以上代码只是为了说明数据流程,故在实际应用时还需要作代码优化。

观察以上代码,在点击“下一页”时,把最后一条记录的 id 传递给新页面,新页面再 request.QueryString("id") 将值取出来,确定下一个页面显示哪些内容。

这种方法充分利用了前一次分页的数据进行本页分页,所以速度要快些,那么“上一页”又如何办呢,原理是一样的,不过要复杂一些:

sql = "select * from (select top " & pageSize & " * from tbl where id>" & CLng(request.QueryString("id")) order by id) as a order by a.id desc"

由于上一页,下一页都传参数 id,所以只凭一个 id 参数是无法确定当前要进行上一页操作还是下一页操作的,需要另外传一个参数,如:

response.Write("<a href='?id=" & lastid & "&dir=next'>下一页</a>")

B3 的局限性非常大,因为它仅能进行上一页、下一页或首页、末页的定位,不能直接跳转到某一页。一般仅应用于某些论坛。

相关文章