Moo*_*oon 6 php zend-framework zend-paginator
我即将在我的项目中使用Zend_Paginator类.我在互联网上找到了班级的例子.其中之一是
$sql = 'SELECT * FROM table_name ';
$result = $db->fetchAll($sql);
$page=$this->_getParam('page',1);
$paginator = Zend_Paginator::factory($result);
$paginator->setItemCountPerPage(10));
$paginator->setCurrentPageNumber($page);
$this->view->paginator=$paginator;
Run Code Online (Sandbox Code Playgroud)
在第一行,它实际上从table_name中选择所有行.如果我有50000行的表怎么办?那将是非常低效的.
还有其他方法可以使用Zend Paginator吗?
Pas*_*TIN 12
关于这个问题,您可能会对本手册的这一部分感兴趣:39.2.2.DbSelect和DbTableSelect适配器,声明(引用,强调我的):
...数据库适配器需要更详细的解释.
与普遍认为的相反,这些适配器不会从数据库中获取所有记录以便对它们进行计数.
相反,适配器操纵原始查询以生成相应的COUNT查询.
Paginator然后执行该COUNT查询以获得行数.
这确实需要额外的数据库往返,但这比获取整个结果集和使用要快许多倍count().
特别是对大量数据的收集.
(在该页面上还有更多要阅读的内容 - 并且有一个示例可以为您提供更多信息)
我们的想法是您不再自己获取所有数据,但是您将告诉Zend_Paginator它必须使用哪个适配器来访问您的数据.
此适配器将特定于" 通过SQL查询获取的数据 ",并且将知道如何在数据库端直接对其进行分页 - 这意味着只获取所需内容,而不是像您最初那样获取所有数据.
我建议传递一个Zend_Db_Select对象,Zend_Paginator::factory($select);而不是传递结果行集.否则,您将选择整个结果集,然后进行分页.在当前的解决方案中,如果您有一百万行,则在获取当前页面定义的行块之前,您将选择所有行.
| 归档时间: |
|
| 查看次数: |
1674 次 |
| 最近记录: |