2012-04-04 96 views
0

這是我的查詢:Zend的分頁程序限行(優化)

class services extends Zend_Db_Table{ 

function Get_Services($user_id){ 
    $DB = Zend_Db_Table_Abstract::getDefaultAdapter(); 

    $select = $DB->select() 
       ->from(array('p' => 'phone_service')) 
       ->join(array('u' => 'user_preferences'), 'u.phone_service_id = p.phone_service_id') 
       ->where('u.user_preferences_name = ?', 'is_user_package_active') 
       ->where('p.user_id = ?', $user_id); 
      return $select; 
    } 
    } 

這是我的控制器:

class ServicesController extends Zend_Controller_Action{ 
     $instance = new services(); 
     $select = $instance->Get_Services($user_id); 

     $adapter = new Zend_Paginator_Adapter_DbSelect($select); 
     $paginator = new Zend_Paginator($adapter); 

     $page=$this->_getParam('page',1); 
     $paginator->setItemCountPerPage(10); 
     $paginator->setCurrentPageNumber($page); 
     $paginator->setPagerange(5); 
} 

什麼我做的是,首先我查詢所有行,然後執行以下操作:

$adapter = new Zend_Paginator_Adapter_DbSelect($select); 
$paginator = new Zend_Paginator($adapter); 

我的問題是,我如何優化它,使它從結果查詢只有10行,不是所有的人?

回答

1

With DbSelect adapter does查詢只有10行。剖析您的查詢並檢查 - 您應該看到2個選擇AFAIR - 一個由ZF操縱以獲得總行數,另一個獲取LIMITOFFSET的實際數據。

+0

但在此之前,我正在查詢和應用Zend_Paginator_Adapter_DbSelect它有什麼關係? – 2012-04-04 10:56:01

+1

我沒有看到你提出查詢。您正在創建一個「選擇」對象,但它只是一個對象,在您通過'fetchXxx()'方法或分頁器自己創建它們之前,不會進行任何查詢。 – bububaba 2012-04-04 10:58:05