我的表格有三列:username
,followerCount
和CreateDate
。
表格中有大约110000名用户,我正在尝试显示followerCount
订购的用户。我这样做:
select top 50 *
from Users
where followerCount <= @followerCount
order by followerCount desc, createDate desc
因此,对于第二页,我从第一页开始传递followerCount
,接收下一页,依此类推。
但是表中有一些用户他们有相同的关注者数量。例如,有250个用户拥有5000个粉丝。因此,当我进行分页时,我无法正确获取下一页,因为有更多用户拥有5000个粉丝。
例如我在第9页,最后一个用户有5001个关注者,我将5001传递给存储过程,我得到50个拥有5000个用户的用户。但是有200个用户更多,当我将这个时间5000(从prev分页的最后一个号码)再次传递到我的存储过程时,它将跳过所有其余的并带给我4xxx粉丝的用户。
如何为具有相同数量关注者的正确用户提供帮助?
更正:我正在使用实体框架,我发布了SQL语句以便于理解。
答案 0 :(得分:0)
只需跟踪您所在的页面,然后您就可以使用“跳过”和“摘机”为您进行分页:
var page=9; //Set to whatever page you want
var pageSize=50;
var results=db.Users
.OrderByDescending(u=>u.followerCount)
.ThenByDescending(u=>u.createDate)
.Skip((page-1)*pageSize)
.Take(pageSize);
如果您需要存储过程为您执行分页,那么您需要了解ROW_NUMBER OVER()如何适用于旧版本的SQL Server(2012之前)或OFFSET FETCH适用于较新版本的SQL Server