username
、followerCount
およびの 3 つの列を持つテーブルがありますCreateDate
。
テーブルには約 110000 人のユーザーがいて、ユーザーの順番を表示しようとしていますfollowerCount
。私は次のようにします:
select top 50 *
from Users
where followerCount <= @followerCount
order by followerCount desc, createDate desc
したがって、2 番目のページでは、最初のページから最後に渡しfollowerCount
、次のページを受け取ります。
しかし、テーブルにはフォロワー数が同じユーザーがいます。たとえば、250 人のユーザーに 5000 人のフォロワーがいるとします。そのため、ページングを行うと、5000 フォロワーのユーザーが増えているため、次のページを正しく取得できません。
たとえば、私は 9 ページにいて、最後のユーザーには 5001 人のフォロワーがいて、5001 をストアド プロシージャに渡し、5000 人のユーザーを持つ 50 人のユーザーを取得します。しかし、さらに 200 人のユーザーがいて、今度は 5000 (前のページングの最後の数字) を再びストアド プロシージャに渡すと、残りはすべてスキップされ、4xxx フォロワーを持つユーザーが表示されます。
同じ数のフォロワーを持つ正しいユーザーを連れてくるにはどうすればよいですか?
訂正: この目的のために Entity Framework を使用しています。わかりやすいように SQL ステートメントを掲載しました。