Повторяющийся набор записей
Вопрос
Я хочу выполнить итерацию по записям, возвращаемым из базы данных 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
и т.д.