Zend 1 Paginator лимит

Я работаю с Zend 1 (1.12) и использую класс Zend_Paginator для отображения результатов запроса на веб-странице. Однако существует большое количество записей (более миллиона), и на самом деле в большинстве случаев им понадобится или захочется выполнить поиск только по 1000 или около того самых последних записей.

Проблема в том, что у меня уже есть часть веб-страницы, устанавливающая значение «на страницу», что по своей сути создает ограничение (и смещение, если они больше не находятся на «странице 1» поиска.)

По сути, я спрашиваю, есть ли способ сказать Zend_Pagintor «извлекать только первые 1000 записей, а затем разбивать их на страницы в зависимости от выбора пользователя для каждой страницы»?

Я попытался передать параметр limit в интерфейс, который я использую, но Zend_Paginator, кажется, игнорирует это, извлекает все результаты, а затем разбивает их на страницы.

function getRecords($currentPage)
{
    $select = "select * from table where user_id = 1 limit 1000"; 
    /* $select is actually a Zend_Db_Table_Select object, not a string. */
    $paginator = new Zend_Paginator::factory($select);
    $paginator->setItemCountPerPage(25);
    $paginator->setCurrentPageNumber($currentPage);

    return $paginator;
}

($select, очевидно, является заполнителем.)


person P. Gearman    schedule 11.03.2016    source источник
comment
Я никогда не использовал фабрику, как это раньше. Я думал, вам нужно создать запрос или передать ему набор строк.   -  person Gavin    schedule 11.03.2016
comment
Извините, я не ясно выразился. Переменная $select в данном случае — это запрос, созданный с помощью другой функции. Текст этого запроса - это то, о чем цитируется. Но на самом деле это объект Zend_Db_Table_Select.   -  person P. Gearman    schedule 12.03.2016


Ответы (2)


Установить общее количество строк вручную

$select = "select * from table where user_id = 1";
$paginator = new Zend_Paginator::factory($select);
$paginator->getAdapter()->setRowCount(1000);
...
person Max P.    schedule 12.03.2016

Попробуйте создать представление SQL из вашего ограниченного запроса:

CREATE OR REPLACE VIEW table_view AS
SELECT * 
FROM table 
WHERE user_id = 1 
LIMIT 1000

Это представление вернет только нужные вам строки (в данном случае 1000 строк), затем переключите Zend_Db_Table_Select на это представление и создайте разбивку на страницы, как это делает ваш метод getRecord.

person Daniel Gadawski    schedule 12.03.2016