我正在使用Zend 1(1.12),我正在使用Zend_Paginator类在网页上显示查询结果。然而,有大量的记录(超过一百万),而且实际上,在大多数情况下,他们只需要或想要搜索最近的1000个左右的记录。
问题是,我已经将网页的一部分设置为“每页”值,这本身就会产生限制(如果它们不再位于搜索的“第1页”,则会产生偏移。)< / p>
基本上,我要问的是,有没有办法告诉Zend_Pagintor“只获取前1000条记录,然后根据用户的每页选择对它们进行分页”?
我已经尝试将limit参数传递到我正在使用的接口中,但是Zend_Paginator似乎忽略了这一点,获取所有结果,然后对它们进行分页。
function getRecords($currentPage)
{
$select = "select * from table where user_id = 1 limit 1000";
/* $select is actually a Zend_Db_Table_Select object, not a string. */
$paginator = new Zend_Paginator::factory($select);
$paginator->setItemCountPerPage(25);
$paginator->setCurrentPageNumber($currentPage);
return $paginator;
}
($ select显然是一个占位符。)
答案 0 :(得分:2)
手动设置总行数
$select = "select * from table where user_id = 1";
$paginator = new Zend_Paginator::factory($select);
$paginator->getAdapter()->setRowCount(1000);
...
答案 1 :(得分:0)
尝试从有限的查询中创建SQL视图:
CREATE OR REPLACE VIEW table_view AS
SELECT *
FROM table
WHERE user_id = 1
LIMIT 1000
此视图将仅返回您想要的行(在本例中为1000行),然后将Zend_Db_Table_Select切换到此视图并像getRecord方法一样创建分页器。