Perlを使用してMySQLデータベースから返されたレコードを反復処理したいのですが、一度に10レコードしかありません。その理由は、サーバーコンポーネントはリクエストごとに10個のアイテムしか処理できないためです。
例えば:
クエリが35レコードを返した場合、4つのリクエストでデータを送信する必要があります。
レコード数のリクエスト# -------- -------- 1 10 2 10 3 10 4 5
タスクを達成するための最良の方法は何ですか?
MySQLのLIMIT句を見てください。次のようなクエリを作成できます。
SELECT * from some_table LIMIT 0, 10;
SELECT * from some_table LIMIT 10, 10;
など。ここで、LIMITの後の最初の数字はオフセットで、2番目の数字はレコードの数です。
もちろん、最初に合計数のクエリを実行し、すべての結果を取得するために選択したクエリを実行する必要がある回数を把握する必要があります。
あるいは、Perlでは、DBIx :: ClassのようなORMパッケージを使用して、結果のセットを介してページ付けを処理し、それらを自動取得することができます。
クエリを調整して、10行を選択できます。
select *
from yourtable
order by idcolumn
limit 10;
行を反復処理するときは、処理する行のIDを保存します。10行を処理したら、次の10行をフェッチします。
select *
from yourtable
where idcolumn > stored_id
order by idcolumn
limit 10;
10行未満を返すまで、最後のクエリを続けます。
最初のページの場合:
SELECT *
FROM table1
ORDER BY
field
LIMIT 0, 10
秒ページの場合:
SELECT *
FROM table1
ORDER BY
field
LIMIT 10, 10
等