Zend 1 Paginator limit

Я работаю с 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 является заполнителем.)

1

Решение

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

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

Другие решения

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

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

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

0

По вопросам рекламы [email protected]