Я работаю с 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 является заполнителем.)
Установите общее количество строк вручную
$select = "select * from table where user_id = 1";
$paginator = new Zend_Paginator::factory($select);
$paginator->getAdapter()->setRowCount(1000);
...
Попробуйте создать представление SQL из вашего ограниченного запроса:
CREATE OR REPLACE VIEW table_view AS
SELECT *
FROM table
WHERE user_id = 1
LIMIT 1000
Это представление вернет только те строки, которые вы хотите (в данном случае 1000 строк), затем переключите ваш Zend_Db_Table_Select на это представление и создайте paginator, как это делает ваш метод getRecord.