SQL における制限とページングの組み合わせ

select * from test limit 2,10;

このステートメントの意味: 3 ステートメントから始まり、合計 10< /span> ステートメントを表示しました。

select * from test limit a,b;

a=0、最初のレコード。

a=1、2 番目のレコード。

a=2、3 番目のレコード。 

このステートメントの意味: a+1 ステートメントからクエリを開始し、合計 b ステートメント。 

合計Record_num 個のデータがある場合、 ページ単位で表示したい a>

1 ページあたり rnpp 個のデータがあり、合計 page_num ページになり、最終ページのレコード数は lprn になります。

Record_num=page_num*rnpp+lprn;

既知の Record_num、rnpp。

lprn=Record_num%rnpp;
if(lprn==0){page_num=Record_num/rnpp;}
else {page_num=Record_num/rnpp+1;}

ここでページnow_pageの対応するデータを取得したいのですが、SQL を使用してそれを表現するにはどうすればよいですか?

考える:

該当するデータはどのレコードから始まり、合計で何件ありますか?

該当データがレコードcから始まり、合計bレコードあったとする。

最初のページの最初のデータ: c=1

2 ページ目の最初のデータ: c=1+rnpp;

3 ページ目の最初のデータ: c=1+rnpp*2;

ページ now_page の最初のデータ: c=1+rnpp*(now_page-1);

ページ now_page にはどのくらいのデータがありますか?

ケースバイケースで話し合います。

(1)lprn=0、つまり各ページにrnppのデータが含まれます。

(2)lprn!=0、最初の page_num-1 ページには rnpp データがあり、最後のページのデータは lprn です。

if(lprn==0)b=rnpp;
else{
    if(now_page==page_num)b=lprn;
    else b=rnpp;
}

関連する最後の SQL ステートメントは次のとおりです。

a=c-1;
select * from test limit a,b;

 

おすすめ

転載: blog.csdn.net/weixin_51883798/article/details/134730807