mysql - 如何提高 zend paginator 分页的性能

标签 mysql zend-framework zend-db zend-paginator

我已经制作了一个基于 AJAX 的 Zend_Paginator,但是我不想从查询中获取所有记录。例如;我每页有 10 个项目,所以我希望我的查询只获取 10 行。

这是代码:-

$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 );

我如何限制我的查询,以便它首先提取第一页的 10 行,如果是第二页,则它只提取 11 到 20 行,依此类推?

最佳答案

你可以这样做

$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);

然后是您的其余代码。

关于mysql - 如何提高 zend paginator 分页的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9110092/

相关文章:

javascript - 我应该如何最好地跟踪页面请求之间的计时器?

mysql - 从三个表中选择数据,其中按行显示第一个表中的所有记录,并水平显示另一个表中的所有重复项

php - 使用 Zend_Feed_Reader 的 RSS 命名空间

php - 插入数组上的 zend db 引号(转义)将引号添加到字符串

php - 不同的 PHP 和 MySQL 日期时间

mysql - 存储过程中的变量范围?

php - Zend_Db_Table Select missing data,直接PHP查询ok

zend-framework - 使用标签装饰器添加所需标记的最佳方法是什么 - Zend

php - Zend_Db 和基于日期的查询

zend-framework - 如何使用 Zend DB 获取列名