0

我有一个包含三列的表usernamefollowerCountCreateDate

表中有大约 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(上一个分页中的最后一个数字)再次传递给我的存储过程时,它将跳过所有其他用户并为我带来 4xxx 个关注者的用户。

我如何才能带来拥有相同数量关注者的正确用户?

更正:我为此目的使用实体框架,我发布了 SQL 语句以便于理解。

4

1 回答 1

0

只需跟踪您所在的页面#,然后您可以使用 Skip 和 Take 为您进行分页:

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

于 2015-11-23T05:00:35.377 回答