データベースに多くのレコードがある状況では、クエリを実行するときにページングが必要です. 以下では、Access データベースの 2 つのページング方法について説明します. 他のデータベースには、より良い方法があるようです. ここでは、Access データベースについてのみ説明します.
1 アクセスクエリ結果のページネーション方法 1
1.1 方法
ページあたりのレコード数を CntPerPage とすると、ページ 1 のクエリ結果を取得するには、次の SQL ステートメントを使用します。
SELECT * FROM (
SELECT TOP CntPerPage * FROM(
SELECT TOP Page*CntPerPage * FROM TableName WHERE Query_Conditionm ORDER BY OrderField
) ORDER BY OrderField DESC
) ORDER BY OrderField
このうち、TableName はテーブル名、Query_Condition はクエリ条件、OrderField はソートに使用するフィールド名です。
1.2 原則
3 ステップ クエリのネストされた使用:
クエリの最初のステップ: 現在のページと以前のすべてのページのレコードをクエリし、並べ替えフィールドに従って降順に並べ替えます。
SELECT TOP Page*CntPerPage * FROM TableName WHERE Query_Conditionm ORDER BY OrderField
クエリの 2 番目のステップ: クエリしたレコードの最初の CntPerPage レコードをクエリします (降順で並べ替えます) (降順を維持します)。これらはすべて Page のレコードです。
SELECT TOP CntPerPage * FROM( 第一步查询结果 ) ORDER BY OrderField DESC
クエリの 3 番目のステップ: クエリの前のステップでは、Page ページのすべてのレコードを実際にクエリしましたが、それらは降順で並べられています. 3 番目のステップは、取得したばかりのデータを正の順序に変更するだけです. 順序が不要な場合、またはプログラム内に他のデータ並べ替えプロセスがある場合は、この手順を省略できます。
SELECT * FROM ( 第二步查询结果 ) ORDER BY OrderField
1.3 例
Student テーブルで、年齢が 20 歳未満のすべてのレコードをクエリし、名前で並べ替え、ページあたりのレコード数が 100 で、5 ページのクエリ結果を取得するには、次の SQL ステートメントを使用します。
SELECT * FROM (SELECT TOP 100 * FROM( SELECT TOP 500 * FROM Student WHERE age<20 ORDER BY name ) ORDER BY name DESC) ORDER BY name
2 インターネットでよく使われる NOT IN メソッド
これはウェブでページネーションの方法を検索したときに出てくる最も一般的な方法です。
方法:
SELECT TOP CntPerPage * FROM TableName WHERE Query_Conditionm AND id NOT IN (
SELECT TOP (Page-1)*CntPerPage id FROM TableName WHERE Query_Conditionm ORDER BY id
) ORDER BY id
原則:
2 段階のクエリ:
ステップ 1: このページの前にすべての適格なレコード ID を選択する
SELECT TOP (Page-1)*CntPerPage id FROM TableName WHERE Query_Conditionm ORDER BY id
ステップ 2: クエリ条件「id は、今選択した id クエリ結果にありません」を追加し、最初の CntPerPage レコードを取得して、クエリ結果が前の Page-1 ページのすべてのデータをフィルタリングするようにしてから、最初のページ ページ上のすべてのレコード。
SELECT TOP CntPerPage * FROM TableName WHERE Query_Conditionm AND id NOT IN (第一步查询结果) ORDER BY id
3 ページング クエリの効率
実際のテスト効率はどちらも似たようなものですが、個人的には後者のNOT IN判定の効率はあまり高くないほうがいいと思いますので、レコード数が比較的少ない場合は前者の方が効率的だと思います。大きい。