php+mysql ページング処理に関するディスカッション。 一般的なページング処理プロセスは次のとおりです。 1. select count(*) from tbl_name を使用して、ページングされるレコードの合計数を取得します。 2. レコード数に基づいてページの合計数を計算します。各ページ: 総ページ数 = ceil (総レコード数 / ページあたりのレコード数) 3. 現在のページ番号に基づいて開始位置を計算します: 開始位置 = (現在のページ番号 - 1)*ページあたりのレコード数4. select * from tbl_name 制限開始位置、ページごとのレコード数を使用します。 表示するレコードを取得します。 5. リスト出力関連情報 このプロセスでは、データベースは必要なデータを取得するためにテーブルを 2 回走査する必要があります。 limit は、指定された数のレコードを取得した後にトラバースを終了しますが、「開始位置」までの以前の取得は無駄になります。 ここでは議論のために新しいアルゴリズムを提案します。 1. mysql のユーザー変数を使用して、各ページの開始 ID 番号を分割して抽出します。 2. クエリ結果のレコード数は、ページの合計数です。 3. 現在のページ番号に基づいて、現在のページの開始 ID を取得します。 4. select * from tbl_name where id>= starting id limit を使用して取得します。 5. リスト出力関連情報は、後者のクエリで確認できます。 id を主キーとして使用するため、データベースは必要なレコードを直接見つけることができます。これにより、クエリ時間が短縮されます。 このクエリ アルゴリズムには副産物があり、前のページと次のページを接続する重複レコードが生成される可能性があります。つまり、各ページ間に重複するレコードが存在します。もちろん、彼を追い出すのは簡単です。 以下はテストコードです: ="; } if($mode) $pagesize++; mysql_query("set @v:=-1"); // mysql ユーザー変数を定義します $rs = mysql_query("select @v:= (@ v+1) as xh, id from data HAVING mod(xh,$pagesize)=0 order by id $order"); mysql_result_all($rs); // 各ページの分布を確認 echo $pages = mysql_num_rows( $rs); // 総ページ数を取得します if($mode) $pagesize--; // ページングの結果をテストします。$i は表示されるページを表します for($i