分页方式有两种
1 第一种是有总数的,能看到一共多少页,一共多少条数据。客户端传2个参数分页,每页数量和当前页
2 第二种是无总数的,不能看一共有多少,下一页有没有得点了才知道,类似微博朋友圈,客户端也传2个参数,每页数量,下一页的游标(id)
sql类似这样 select * from table where id >? order by id desc limit ?
问题来了:第二种是涉及到排序的。如果游标是id,按照id排序,这个没问题。如果游标是id,但是按照其他排序(比如创建时间),因为按照创建时间排序的结果集,id有可能是任意跳跃的。那么sql应该怎么写? 很明显id>?已经不能满足了。
按照其他排序,就要对所有的记录进行排序了,这时候岂不是知道了总数,就变成了第一种方式了;
之所以用第二种分页,我想就是因为数据量比较大,不好全部查询出来;
一般情况下id和创建时间应该是一致的。
select * from table count where 然后就是你的条件,首先是要查询出来总数是多少条数据 然后在进行分页查询
在第二中的情况下记录当前页的 maxID,并以此作为下一页查询的 ID>max_id 条件
SQL Server 为例
方法1:
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
方法2:
SELECT TOP 页大小 *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
方法3:
SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > 页大小*(页数-1)
按啥排序,游标就是啥。