2012-02-02 2 views
0

AJAX 기반 Zend_Paginator를 만들었지 만 쿼리에서 모든 레코드를 가져 오지 않습니다. 예를 들면; 페이지 당 10 개의 항목이 있으므로 내 쿼리에서 10 개의 행만 가져 오도록하고 싶습니다.zend paginator 페이지 매김 성능 향상

$request = $this->getRequest(); 
$phone_service_id = $request->getParam("id"); 
$registry = Zend_Registry::getInstance(); 
$DB = $registry['DB']; 
$sql ="SELECT caller_name,call_number,call_start_time,call_duration,call_direction 
     FROM CALL_LOG 
     WHERE phone_service_id = $phone_service_id"; 
$result = $DB->fetchAll($sql); 
$page=$this->_getParam('page',1); 
$paginator = Zend_Paginator::factory($result); 
$paginator->setItemCountPerPage(10); 
$paginator->setCurrentPageNumber($page); 
$this->view->paginator=$paginator; 
$page = $paginator->getCurrentPageNumber(); 
$perPage = $paginator->getItemCountPerPage(); 
$total = $paginator->getTotalItemCount(); 
$A = ($page - 1) * $perPage + 1; 
$B = min($A + $perPage - 1, $total); 
$C = $total; 
$this->view->assign('url', $request->getBaseURL()); 
$this->view->assign('total',$total); 
$this->view->assign('page',$page); 
$this->view->assign('A',$A); 
$this->view->assign('B',$B); 
$this->view->assign('C',$C); 

어떻게에만 11 ~ 20 행 등등에서 추출 할 수 있도록 자사의 두 번째 페이지 첫 페이지와 경우 처음 10 개 행을 추출 할 수 있도록 내 쿼리를 제한 할 수 있습니다 -이 : 여기

코드입니다 에?

답변

2

당신은 당신이 코드

$select = $DB->select() 
      ->from('CALL_LOG', array('caller_name','call_number','call_start_time','call_duration','call_direction')) 
      ->where('phone_service_id = ?', $phone_service_id); 
$adapter = new Zend_Paginator_Adapter_DbSelect($select); 
$paginator = new Zend_Paginator($adapter); 

하고 나머지처럼 뭔가를 할 수 있습니다.

+0

잘 작동하지만 당신이 할 수있는 방법을 말해 줄래 plz 내가 정말로 원하는 그 일을하고 있는지 확인하십시오. 유일한 specfic 10 행을 querring 말을 –

+1

당신은 mysql 로그 파일을 정확하게 탐색 할 때 어떤 쿼리가 실행되고 있는지 살펴볼 수 있습니다. 페이지. 또한 이것에 대해 zend db 프로파일 러를 사용할 수 있다고 확신합니다. – Optimus

2

Zend_Db_Select 개체에 쿼리를 구성하십시오. 그런 다음 Zend_Paginator_Adapter_DbSelect를 사용하십시오. 자동으로 쿼리에 제한과 오프셋을 추가합니다.

+0

친절하게 내 코드를 변경하는 방법 알려주세요. ?? –

1

Zend_Paginator manual page을 살펴보면 Zend_Paginator에 Zend_Select 개체를 제공하면 필요한 동작이 이미 내장되어있는 것을 알 수 있습니다. 현재로서는 array을 제공하고 있습니다.

는 다음과 같이 코드를 변경해야이 변경하려면 : -

$request = $this->getRequest(); 
$phone_service_id = $request->getParam("id"); 

//altered code follows 
$select = new Zend_Db_Select(Zend_Db_Table::getDefaultAdapter()); 
$select = $DB->select() 
     ->from('CALL_LOG', array(
       'caller_name', 
       'call_number', 
       'call_start_time', 
       'call_duration', 
       'call_direction')) 
     ->where('phone_service_id = ?', $phone_service_id); 
$paginator = Zend_Paginator::factory($select); 
//End of altered code 

$paginator->setItemCountPerPage(10); 
$page=$this->_getParam('page',1); 
$paginator->setCurrentPageNumber($page); 
$this->view->paginator=$paginator; 
$page = $paginator->getCurrentPageNumber(); 
$perPage = $paginator->getItemCountPerPage(); 
$total = $paginator->getTotalItemCount(); 
$A = ($page - 1) * $perPage + 1; 
$B = min($A + $perPage - 1, $total); 
$C = $total; 
$this->view->assign('url', $request->getBaseURL()); 
$this->view->assign('total',$total); 
$this->view->assign('page',$page); 
$this->view->assign('A',$A); 
$this->view->assign('B',$B); 
$this->view->assign('C',$C); 

Zend_Paginator 지금과 같이 데이터베이스를 조회하고이 필요한 경우 돌볼 것입니다.
젠드 프레임 워크를 사용하기 위해서는 프리덤으로 manualAPI documentation을 읽어야합니다. 정말로 어려움을 겪을 것입니다.

개인적으로 코드에 가장 적합한 문서를 찾았으므로 당시 사용중인 구성 요소를 읽어야합니다. 많은 것을 배우게됩니다.

참고이 코드를 테스트 할 수는 없지만 작동하지 않아야하는 이유는 없습니다.

+0

Catchable fatal error : Zend_Db_Select :: __ construct()에 전달 된 인수 1은 Zend_Db_Adapter_Abstract의 인스턴스 여야하며, 주어진 줄은 C : \ xampp \ htdocs \ phoggi \ application \ controllers \ LoginController.php에서 호출되고 C에서 정의됩니다. : \ xampp \ htdocs \ phoggi \ library \ Zend \ Db \ 163 행의 Select.php –

+0

= thanQ 대단히 선생님 –