gpt4 book ai didi

php - 当查询有 "distinct"时,Zend Paginator 显示错误的页数

转载 作者:可可西里 更新时间:2023-11-01 08:38:04 27 4
gpt4 key购买 nike

我在一个项目中使用 Zf 1.10,并且一直在使用 Zend_Paginator 和 Zend_DbTable 查询非常成功,直到现在为止。

查询需要一个 DISTINCT 关键字来删除由联接创建的重复行,但是当我添加它时,分页器错误地显示了两页结果的导航,而实际上只有一页结果。一些挖掘表明它正在执行两个查询,一个用于我之后的结果集(77 行),另一个用于获取计数。但是 Zend 魔法生成的第二个查询不包含 DISTINCT 关键字,因此计数返回 112 行而不是 77 行。

这是相关的部分

$select = $this->select()
->setIntegrityCheck(false)
->from('companies')
->distinct()
->join('project_team', 'companies.companyID = project_team.companyID', null)
->join('project_team_roles', 'project_team.roleID = project_team_roles.roleID', null)
->join('projects', 'projects.projectID = project_team.projectID', null)
->where('project_team_roles.isArchitect')
->where('companies.companyName LIKE ?', '%' . $str . '%')
->where('projects.islive AND NOT projects.isDeleted')
->order('companies.companyName');
$adapter = new Zend_Paginator_Adapter_DbTableSelect($select);
$paginator = new Zend_Paginator($adapter);
$paginator->setCurrentPageNumber($page);
$paginator->setItemCountPerPage(100);
return $paginator;

除了忽略计数查询中的 DISTINCT 子句外,它生成的查询没有任何问题。如果您删除 ->distinct() 位,一切都很好 - 112 行和分页都是 super 的,除了数据有重复的行。

我看到关于类似问题的错误报告以公平的方式回溯,但它们在 ZF 的早期版本中被标记为已修复

?这是一个已知的问题吗?如果不编写自己的分页,我能做些什么吗?并不是说编写分页特别具有挑战性,但这意味着这一点将与项目的其余部分不一致

非常感谢

伊恩

编辑 - 找到了一个解决方法,作为答案发布在下面。

最佳答案

很久以前就有人问过这个问题,但仍然需要一个答案。

您应该在 Controller 中使用 setRowCount() 方法。

$select = $your_model->getSelect();
$select_count = $your_model->getCount(); // geting count from select above
$adapter = new Zend_Paginator_Adapter_DbSelect($select);
$adapter->setRowCount((int)trim($select_count)); // <-- // set integer !
$paginator = new Zend_Paginator($adapter);
// That's it
...

$this->view->paginator = $paginator;
// and so on...

关于php - 当查询有 "distinct"时,Zend Paginator 显示错误的页数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3896826/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com