ページネーションのオフセットとリミットを計算
1から始まるページ番号を、オフセット方式のクエリに必要な正確な値へ変換できます。要求するページ、1ページに含める最大レコード数、利用可能な総項目数をご指定ください。0から始まるオフセット、クエリのリミット、総ページ数を返します。ページ番号またはページサイズが1未満の場合はエラーになるため、不正なデータベースクエリや一貫性のないナビゲーション制御を、アプリケーションコードに到達する前に防げます。
無料で実行
ページ指定をクエリパラメーターへ変換します
画面上のページネーションでは、人に分かりやすいページ番号が一般的ですが、データベースや API では、0から始まるオフセットとリミットが求められることがあります。この計算機は、両者の規則を結び付けます。1から始まるページ番号、ページサイズ、コレクション全体の総項目数をご入力ください。オフセットは、ページ番号から1を引き、その値にページサイズを掛けて求めます。リミットにはページサイズがそのまま使われます。たとえば、25件ずつ表示するコレクションの3ページ目は、最初の50件の後から始まるため、オフセットは50、リミットは25です。これらの値は、一般的な SQL の LIMIT と OFFSET 句へ直接渡すことも、別サービスの同等パラメーターへ割り当てることもできます。結果は常に決定的であり、実際のレコードを参照したり取得したりしません。ページ付きリクエストを準備するための計算だけを行うため、バックエンド、スクリプト、テスト、文書作成、障害調査にご活用いただけます。
総ページ数と境界条件をご確認ください
総ページ数は、総項目数をページサイズで割り、その結果を切り上げて求めます。最後のページが一部しか埋まっていなくても1ページとして扱うため、切り上げが必要です。101件を25件ずつ表示する場合、4ページに100件が入り、残りの1件には5ページ目が必要です。総項目数が0なら、表示する結果ページが存在しないため、総ページ数も0になります。要求したページは、算出した総ページ数の範囲へ自動調整されません。そのため、コレクションが3ページしかなくても、10ページ目の指定から有効なオフセットを計算できます。これは意図した動作です。本機能はページネーションの算術結果を返し、範囲外ページの扱いは呼び出し側へ委ねます。要求ページと total_pages を比較し、空の結果を返す、最終ページへ移動する、または未検出の応答を表示するなど、用途に応じてご判断いただけます。計算と運用方針を分離することで、データベース、REST サービス、画面のいずれでも予測可能な結果になります。
クエリを作る前に入力をご検証ください
page と page_size には、1以上の安全な整数をご指定ください。0または負数は、1から始まるページ規則に反するか、意味のないリミットを作るため、無効入力エラーになります。total_items には0以上の安全な整数が必要です。コレクションのレコード数を負数や小数にはできません。安全な整数かどうかの確認により、JavaScript で非常に大きな値を乗算した際に、精度が気付かないまま失われることも防ぎます。計算されたオフセットが安全な整数範囲を超える場合、不正確な数値を返さずにリクエストを拒否します。同じ検証を API の境界で行えば、不正なパラメーターがデータベースアダプターへ届くのを防げます。本機能はネットワークへ接続せず、データを保存せず、乱数や時刻依存値も使いません。同じ入力には常に同じ出力を返します。API による自動処理は1回 $0.002 で、設計や問題調査の際はブラウザー上で例をご確認いただけます。
活用例
データベースクエリを作成
画面で選択されたページを、SQL クエリ用の LIMIT 値と OFFSET 値へ変換します。
ページ移動コントロールを表示
ナビゲーションの有効化、無効化、ラベル表示に必要な総ページ数を計算します。
API の境界条件をテスト
空のコレクション、項目数の少ない最終ページ、結果範囲外のページについて期待値を生成します。
よくある質問
ページ番号は0と1のどちらから始まりますか?
1から始まります。ページ1の offset は0で、ページ2は1ページ分の page_size の後から始まります。
total_pages はどのように計算されますか?
total_items を page_size で割って切り上げるため、一部だけ埋まった最終ページも数えられます。
total_items が0の場合はどうなりますか?
total_pages は0です。一方、offset と limit は指定されたページとページサイズから引き続き計算されます。
total_pages より後のページを指定できますか?
はい。数学的な offset を返し、空の結果を表示するかページを拒否するかは、お客様のアプリケーションで決定できます。
API リクエストの料金はいくらですか?
API リクエスト1回につき $0.002 です。ブラウザーでも計算をご利用いただけます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/pagination-offset-calc \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"page":3,"page_size":25,"total_items":123}'const res = await fetch("https://api.kit.forhosting.com/dev/pagination-offset-calc", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"page": 3,
"page_size": 25,
"total_items": 123
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/pagination-offset-calc",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"page": 3,
"page_size": 25,
"total_items": 123
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/pagination-offset-calc", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"page":3,"page_size":25,"total_items":123}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"page":3,"page_size":25,"total_items":123}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/pagination-offset-calc", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"page": 3,
"page_size": 25,
"total_items": 123
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.pagination_offset_calc",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |