记录集迭代

发布于 2024-07-17 02:18:34 字数 375 浏览 5 评论 0原文

我想使用 Perl 迭代从 MySQL 数据库返回的记录,但一次只能迭代 10 条记录。 原因是服务器组件每个请求只能处理 10 个项目。

例如:

如果查询返回 35 条记录,则 我必须在 4 个请求中发送数据:

Request #         # of Records
--------             --------
   1                    10
   2                    10
   3                    10
   4                     5

完成任务的最佳方法是什么?

I want to iterate through records returned from a MySQL database using Perl, but only ten records at a time. The reason is that the server component can only handle 10 items per request.

For example:

If the query returned 35 records then
I have to send the data in 4 requests:

Request #         # of Records
--------             --------
   1                    10
   2                    10
   3                    10
   4                     5

What is the best way to accomplish the task?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

无远思近则忧 2024-07-24 02:18:34

查看 MySQL 的 LIMIT 子句。 您可以进行如下查询:

SELECT * from some_table LIMIT 0, 10;
SELECT * from some_table LIMIT 10, 10;

等,其中 LIMIT 之后的第一个数字是偏移量,第二个数字是记录数。

当然,您首先需要对总计数进行查询,并计算出需要运行选择查询多少次才能获取所有结果。

或者,在 Perl 中,您可以使用像 DBIx::Class 这样的 ORM 包,它可以通过结果集处理分页并自动检索它们。

Look at the LIMIT clause for MySQL. You could have a query like:

SELECT * from some_table LIMIT 0, 10;
SELECT * from some_table LIMIT 10, 10;

etc. where the first number after LIMIT is the offset, and the second number is the number of records.

You'd of course first need to do a query for the total count and figure out how many times you'll need to run your select query to get all results.

Alternatively, in Perl you can use an ORM package like DBIx::Class that can handle pagination through sets of results and auto-retrieving them for you.

浅听莫相离 2024-07-24 02:18:34

您可以调整查询以选择 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 行。

You can adjust the query to select 10 rows:

select * 
from yourtable
order by idcolumn
limit 10;

When iterating over the rows, store the ID of the row you process. After you've processed 10 rows, fetch the next 10:

select * 
from yourtable
where idcolumn > stored_id
order by idcolumn
limit 10;

Continue the last query until it returns less than 10 rows.

微暖i 2024-07-24 02:18:34

对于第一页:

SELECT  *
FROM    table1
ORDER BY
        field
LIMIT 0, 10

对于第二页:

SELECT  *
FROM    table1
ORDER BY
        field
LIMIT 10, 10

等等。

For first page:

SELECT  *
FROM    table1
ORDER BY
        field
LIMIT 0, 10

For seconds page:

SELECT  *
FROM    table1
ORDER BY
        field
LIMIT 10, 10

etc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文