ZF2中的Zend \ Paginator \ Adapter \ DbSelect DISTINCT问题

时间:2013-03-22 10:53:08

标签: zend-framework2 paginator

我在ZF2中的paginator 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 \ DbSelect count()函数可能是错误的。

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

SELECT COUNT(1) AS c FROM myTable;

请建议我该怎么做?

1 个答案:

答案 0 :(得分:2)

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

正如人们可以看到https://github.com/zendframework/zf2/blob/master/library/Zend/Paginator/Adapter/DbSelect.php

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

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

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