MySQL LIMIT、OFFSET を使用したページネーション: 動的ページ作成
ページネーションにより、ユーザーはページごとに限られた数の項目を表示することで、大規模なデータセットをナビゲートできます。 MySQL の LIMIT 句と OFFSET 句を利用すると、データの特定のページを効率的に取得できます。
ただし、潜在的なページ番号ごとに個別のページを作成するのは非効率です。代わりに、データベース内の行の合計数に基づいてページ数を動的に決定できます。
ページ数の決定
合計行数を確認するにはページを作成するには、まず別のクエリを使用してテーブル内の行の総数を計算する必要があります。
SELECT COUNT(*) FROM menuitem
これにより、単一のクエリが返されます。
ページ数の計算
次に、合計行を必要なアイテムごとに割ることで、合計ページ数を計算できます。
$page_count = (int)ceil($row_count / $items_per_page);
無効なページの調整リクエスト
ユーザーが存在しないページ (例: 3 つしかない場合のページ 5) をリクエストした場合、状況に応じて最後のページまたは最初のページにリダイレクトできます。 .
ページリンクの出力
合計数がわかったらページのリンクのリストを生成できます。現在のページについてはテキストとして表示し、他のページについてはリンクを作成します。
for ($i = 1; $i <= $page_count; $i++) { if ($i === $page) { // current page echo 'Page ' . $i . '<br>'; } else { // link to other page echo '<a href="/menuitem.php?page=' . $i . '">Page ' . $i . '</a><br>'; } }
改訂コード
動的ページ計算の使用
// Get page number from URL $page = 1; if (!empty($_GET['page'])) { $page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT); if (false === $page) { $page = 1; } } // Get total row count $sql = "SELECT COUNT(*) FROM menuitem"; $result = mysqli_query($con, $sql); $row_count = mysqli_num_rows($result); mysqli_free_result($result); // Calculate page count $page_count = (int)ceil($row_count / $items_per_page); // Double check page is in range if ($page > $page_count) { $page = 1; } // Calculate offset $offset = ($page - 1) * $items_per_page; // Select limited data $sql = "SELECT * FROM menuitem LIMIT " . $offset . "," . $items_per_page; $result = mysqli_query($con, $sql); // ... (Rest of your code) ... // Output page links for ($i = 1; $i <= $page_count; $i++) { if ($i === $page) { echo 'Page ' . $i . '<br>'; } else { echo '<a href="/menuitem.php?page=' . $i . '">Page ' . $i . '</a><br>'; } }
このコードにより、番号に基づいてページを動的に作成できます。データベース内の行数を削減できるため、ページ番号とオフセットをハードコーディングする必要がなくなります。
以上がLIMIT と OFFSET を使用して MySQL でページネーション リンクを動的に生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。