在方法 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 的局限性非常大,因为它仅能进行上一页、下一页或首页、末页的定位,不能直接跳转到某一页。一般仅应用于某些论坛。