У меня есть запрос, который работает слишком медленно. загрузка страницы занимает несколько минут. Я занимаюсь таблицей со столами с более чем 100 000 записей. В моем запросе он захватывает все записи или получает только ту сумму, которая мне нужна для этой страницы? Нужно ли устанавливать лимит в запросе? Если я это сделаю, разве это не приведет к тому, что страничка нечетного количества записей?zend framework paginator (Zend_Paginator) результаты слишком медленные
$paymentsTable = new Donations_Model_Payments();
$select = $paymentsTable->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
$select->setIntegrityCheck(false)
->from(array('p' => 'tbl_payments'), array('clientid', 'contactid', 'amount'))
->where('p.clientid = ?', $_SESSION['clientinfo']['id'])
->where('p.dt_added BETWEEN \''.$this->datesArr['dateStartUnix'].'\' AND \''.$this->datesArr['dateEndUnix'].'\'')
->join(array('c' => 'contacts'), 'c.id = p.contactid', array('fname', 'mname', 'lname'))
->group('p.id')
->order($sortby.' '.$dir)
;
$payments=$paymentsTable->fetchAll($select);
// paginator
$paginator = Zend_Paginator::factory($payments);
$paginator->setCurrentPageNumber($this->_getParam('page'), 1);
$paginator->setItemCountPerPage('100'); // items pre page
$this->view->paginator = $paginator;
$payments=$payments->toArray();
$this->view->payments=$payments;
Спасибо, Саймон, но я попробовал, и он все еще просто висит там. Если я запускаю тот же запрос через PhpMyAdmin, он запускается через секунду с 16 000 результатов. Вот запрос: ВЫБРАТЬ tbl_payments.clientid, tbl_payments.contactid, tbl_payments.amount, контакты .fname, contacts.mname, contacts.lname ОТ tbl_payments LEFT JOIN 'contacts' ON contacts.id = tbl_payments.contactid WHERE tbl_payments.clientid = 39 И (tbl_payments.dt_added МЕЖДУ '1262500129' И '1265579129') GROUP BY tbl_payments.id ORDER BY DESC tbl_payments.dt_added – EricP
См пересмотренный код выше .. – Simon
есть ли способ использовать просто sql-запрос для использования в paginator? Может быть, это сработает с этим. – EricP