Zend_Table_Db и Zend_Paginator и Zend_Paginator_Adapter_DbSelect

0

У меня есть следующий запрос:

$this->select()
 ->where("`name` LIKE ?",'%'.mysql_escape_string($name).'%')

Теперь у меня есть код Zend_Paginator:

        $paginator = new Zend_Paginator(
                // $d is an instance of Zend_Db_Select
                new Zend_Paginator_Adapter_DbSelect($d)
        );      

        $paginator->getAdapter()->setRowCount(200);

        $paginator->setItemCountPerPage(15)
                ->setPageRange(10)
                ->setCurrentPageNumber($pag);

        $this->view->data = $paginator;

Как вы видите, я передаю данные в представление с помощью $this->view->data = $paginator До того, как у меня не было $paginator->getAdapter()->setRowCount(200);, я мог бы определить, есть ли у меня какие-либо данные или нет, что я имею в виду с данными, если запрос имеет некоторые результаты, поэтому, если у запроса есть некоторые результаты, я показываю пользователю, если нет, Мне нужно показать им сообщение (Нет результатов!)

Но в этот момент я не знаю, как я могу определить это, так как count($paginator) больше не работает из-за $paginator->getAdapter()->setRowCount(200);, и я использую это, потому что для Zend_Paginator для подсчета страницы требуется около 7 секунд числа.

Итак, как я могу найти, если у моего запроса есть какие-то результаты?

  • 0
    «больше не работает» - что он возвращает в результате?
  • 0
    Больше не работает, значит; что я больше не могу считать $ paginator, потому что он всегда будет иметь одинаковое значение, так как я использую $ paginator-> getAdapter () -> setRowCount (200);
Показать ещё 2 комментария
Теги:
zend-framework

1 ответ

0

Зачем вам устанавливать значениеRowCount() на магическое число? Если какой-либо метод Z_P использует для обнаружения общего количества строк, занимает много времени, вы можете переопределить его таким образом, но вы хотите вычислить фактическое значение, не так ли?

В большинстве случаев Z_P должен автоматически получать правильное число (внутри, через подзапрос). Если этот подзапрос занимает слишком много времени, вы можете попытаться создать свой собственный Zend_Db_Select для выполнения подсчета и передать его в setRowCount().

  • 0
    Да, на самом деле это главная проблема, setRowCount (), но, как вы можете видеть здесь: tinypic.com/r/vesy9c/6 запрос подсчета занимает много времени, таблица также очень большая, миллион строк, вы можете мне помочь? написать запрос на подсчет лучше .. или что мне делать?
  • 0
    Если я правильно понимаю, это 0.00007 секунд, а не 7 секунд (7 * 10 ^ (- 5)). на этой картинке все 3 запроса вместе занимают 2,7 секунды.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню