3

在 ZF2 的分页器 DbSelect 适配器中使用 DISTINCT 查询时遇到问题。我的步骤是。

首先我创建了 Select 对象。

$select = new Select();
$select->columns(
    array(
          'personId' => new Expression("DISTINCT $this->table.person_id"),
'first_name', 'middle_name', 'last_name'));
$select->from($this->table);

然后我将此对象传递给 Zend\Paginator\Adapter\DbSelect

$result = new DbSelect($select, $this->adapter, $this->resultSetPrototype);

现在的问题是,如果我通过打印 sql 查询 echo str_replace('"', '', $select->getSqlString()); 并在 mysql 上运行此查询,它会显示 12 个结果。

$result->count();显示 55 结果。

我试图找出问题并发现 Zend\Paginator\Adapter\DbSelectcount()函数可能有问题。

当我在 Zend\Paginator\Adapter\DbSelectcount()函数中打印 sql 查询时,它会从查询中删除 DISTINCT 子句并添加自己的计数列 c。

SELECT COUNT(1) AS c FROM myTable;

请建议我该怎么办?

4

1 回答 1

2

是的,Manish,你是对的,计数功能有问题。它留下了 distinct 和 group by 子句。我也遇到了同样的问题。虽然没有找到解决方案。

正如人们所看到的那样https://github.com/zendframework/zf2/blob/master/library/Zend/Paginator/Adapter/DbSelect.php

如果您使用 distinct 或 group by 子句,count 函数计算的计数可能会有所不同。

有两种解决方案。1)提出问题并等待他们解决问题 2)编写自己的适配器

我会选择第二个。ZF2 最令人敬畏的事情之一是它为您提供了根据需要编写所有内容的灵活性。所以继续创建你自己的适配器

于 2013-06-08T01:17:06.620 回答