我有一個查詢,運行的方式太慢。該頁面需要幾分鐘才能加載。 我正在做超過100,000條記錄的表的表連接。在我的查詢中,是抓取所有記錄還是僅獲取我需要的頁面數量?我需要在查詢中添加一個限制嗎?如果我這樣做,這不會給分頁器錯誤的記錄數嗎?zend框架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結果運行。下面是查詢: SELECT tbl_payments.clientid,tbl_payments.contactid,tbl_payments.amount, 觸點.fname,contacts.mname,contacts.lname FROM tbl_payments LEFT JOIN'contacts' ON contacts.id = tbl_payments.contactid WHERE tbl_payments.clientid = 39 AND(tbl_payments.dt_added BETWEEN '1262500129' AND '1265579129') GROUP BY tbl_payments.id ORDER BY tbl_payments.dt_added DESC – EricP 2010-02-11 04:21:40
見上文訂正代碼.. – Simon 2010-02-11 13:57:21
有一種使用一個普通的方式sql查詢用於paginator?也許它會適用於此。 – EricP 2010-02-12 01:14:29