我想遍历使用 Perl 从 MySQL 数据库返回的记录,但一次只有十条记录。原因是服务器组件每个请求只能处理 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 之后的第一个数字是偏移量,第二个数字是记录数。
您当然首先需要对总数进行查询,并计算出您需要运行多少次选择查询才能获得所有结果。
或者,在 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
等等