记录集迭代
问题描述:
我想循环访问使用Perl从MySQL数据库返回的记录,但一次只能记录10条记录。原因是服务器组件每个请求只能处理10个项目。记录集迭代
例如:
如果查询返回的35条记录,然后 我不得不在4个请求发送数据:
Request # # of Records -------- -------- 1 10 2 10 3 10 4 5
什么是完成任务的最好方法是什么?
答
您可以调整查询以选择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行。
答
查看MySQL的LIMIT子句。你可以像查询:
SELECT * from some_table LIMIT 0, 10;
SELECT * from some_table LIMIT 10, 10;
等其中限制后的第一个数字是偏移量,第二个数字是记录数。
您当然首先需要对总数进行查询,并计算出您需要运行选择查询来获取所有结果的次数。
或者,在Perl中,您可以使用像DBIx :: Class这样的ORM包,它可以通过一组结果处理分页并自动为您检索它们。
答
第一页:
SELECT *
FROM table1
ORDER BY
field
LIMIT 0, 10
数秒页:
SELECT *
FROM table1
ORDER BY
field
LIMIT 10, 10
等
也许你可以更具体。我没有看到任何Perl代码的尝试。 – 2009-04-22 16:40:10