Zend Paginator с запросом из строки

У меня есть сложный запрос к моей базе данных, который я запускаю с помощью необработанного SQL-запроса. Не использую Zend orm. Я хотел бы добавить Zend Paginator для моего запроса.

Из Zend docs я обнаружил, что мне нужно передать все записи адаптеру Zend Paginator, а он сам сделает COUNT() и LIMIT.

У меня такая ситуация:

$sql = 'complicated query'; //LIMIT added "by hand", I'd like to make it automatically via zend_paginator
$q = $db->fetchAll($sql, array(/*paramteres here*/));

Теперь мой вопрос: как мне использовать Zend Paginator для разбивки на страницы? Какой адаптер мне следует использовать в моей ситуации? Невозможно вручную получить все строки и использовать адаптеры массива (около 50000 записей в таблице).

Любая помощь будет оценена :)


person user1919003    schedule 20.12.2012    source источник


Ответы (1)


Вы можете использовать Zend_Paginator_Adapter_Array, но это не лучший способ. Лучше переписать запрос на Zend_Db_Select и использовать Zend_Paginator_Adapter_DbSelect.

person Vadyus    schedule 20.12.2012
comment
Как я уже писал, адаптер массива не вариант. В результате слишком много записей. - person user1919003; 20.12.2012
comment
Используйте вторую часть ответа, затем - person Vadyus; 20.12.2012
comment
Является ли переписывание запроса к Zend_Db_Select единственным способом? Запрос действительно сложный, и его переписывание в Db_select потребует много времени. - person user1919003; 20.12.2012
comment
Вы можете написать свой собственный адаптер, который будет делать 2 вещи: принять ваш запрос → удалить все выбранные столбцы и использовать только один SELECT COUNT(1) AS count... тогда при работе с этим числом будет сгенерировано ограничение и смещение для основного запроса, но я думаю, что это сложнее, чем переписать запрос на Zend_Db_Select - person Vadyus; 20.12.2012
comment
Хотите получить свой пирог и съесть его, тогда конвертируйте его в Zend_Db_Select. - person ficuscr; 20.12.2012
comment
Извините за поздний ответ :) @Vadyus, было очень легко реализовать собственный адаптер. Одним из недостатков является дублирование кода запроса (один для разбиения на страницы, второй для подсчета). Тем не менее, наверное, лучшим решением будет переписать запрос к Db_Select. Если будет достаточно времени, переконвертирую в Db_select. На данный момент пользовательский адаптер работает нормально :) Спасибо, ребята :) - person user1919003; 20.12.2012