Повторение набора записей - PullRequest
0 голосов
/ 22 апреля 2009

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

Например:

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

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

Как лучше всего выполнить задачу?

Ответы [ 3 ]

5 голосов
/ 22 апреля 2009

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

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

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

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

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

3 голосов
/ 22 апреля 2009

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

select * 
from yourtable
order by idcolumn
limit 10;

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

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

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

0 голосов
/ 22 апреля 2009

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

SELECT  *
FROM    table1
ORDER BY
        field
LIMIT 0, 10

Для страницы секунд:

SELECT  *
FROM    table1
ORDER BY
        field
LIMIT 10, 10

и т.д.

...