【问题标题】:Zend 1 Paginator limitZend 1 分页器限制
【发布时间】:2016-03-25 06:09:08
【问题描述】:

我正在使用 Zend 1 (1.12),并且正在使用 Zend_Paginator 类在网页上显示查询结果。但是,有大量记录(超过一百万条),实际上,在大多数情况下,他们只需要或想要搜索最近的 1000 条左右的记录。

问题是,我已经有一部分网页设置了“每页”值,这本质上会产生一个限制(如果它们不再位于搜索的“第 1 页”上,则会产生偏移量。)

基本上,我要问的是,有没有办法告诉 Zend_Pagintor“只获取前 1000 条记录,然后根据用户的每页选择对它们进行分页”?

我尝试将限制参数传入我正在使用的界面,但 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 显然是一个占位符。)

【问题讨论】:

  • 我以前没有用过这样的工厂。我认为您必须创建一个查询或将行集传递给它。
  • 对不起,我不清楚。在这种情况下,$select 变量是使用另一个函数创建的查询。该查询的文本是引用的内容。但它实际上是一个 Zend_Db_Table_Select 对象。

标签: php zend-framework zend-paginator


【解决方案1】:

手动设置总行数

$select = "select * from table where user_id = 1";
$paginator = new Zend_Paginator::factory($select);
$paginator->getAdapter()->setRowCount(1000);
...

【讨论】:

    【解决方案2】:

    尝试从有限的查询中创建 SQL 视图:

    CREATE OR REPLACE VIEW table_view AS
    SELECT * 
    FROM table 
    WHERE user_id = 1 
    LIMIT 1000
    

    这个视图将只返回您想要的行(在这种情况下为 1000 行),然后将您的 Zend_Db_Table_Select 切换到此视图并像您的 getRecord 方法一样创建分页器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2012-01-11
      相关资源
      最近更新 更多