Вопрос

Я хочу выполнить итерацию по записям, возвращаемым из базы данных MySQL, используя Perl, но только по десять записей за раз.Причина в том, что серверный компонент может обрабатывать только 10 элементов на запрос.

Например:

Если запрос вернул 35 записей, то Я должен отправить данные в 4 запросах:

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

Каков наилучший способ выполнить эту задачу?

Это было полезно?

Решение

Вы можете настроить запрос таким образом, чтобы выбрать 10 строк:

select * 
from yourtable
order by idcolumn
limit 10;

При переборе строк сохраняйте идентификатор строки, которую вы обрабатываете.После того как вы обработали 10 строк, извлеките следующие 10:

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

Продолжайте выполнение последнего запроса до тех пор, пока он не вернет менее 10 строк.

Другие советы

Посмотрите на предложение LIMIT для MySQL.У вас мог бы быть запрос типа:

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

и т.д.где первое число после LIMIT - это смещение, а второе число - количество записей.

Конечно, сначала вам нужно было бы выполнить запрос для получения общего количества и выяснить, сколько раз вам нужно будет выполнить запрос select, чтобы получить все результаты.

В качестве альтернативы, в Perl вы можете использовать ORM-пакет, такой как DBIx::Class, который может обрабатывать разбивку на страницы с помощью наборов результатов и автоматически извлекать их для вас.

Для первой страницы:

SELECT  *
FROM    table1
ORDER BY
        field
LIMIT 0, 10

На странице секунд:

SELECT  *
FROM    table1
ORDER BY
        field
LIMIT 10, 10

и т.д.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top