我在 ZF2 的分页器 DbSelect 适配器中使用 DISTINCT 查询时遇到问题。我的步骤是。
首先我创建了选择对象。
$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;
请建议我该怎么办?
是的,曼尼什,你是对的,计数功能有问题。它留下了 unique 和 group by 子句。我也遇到了同样的问题。但没有找到解决方案。
大家可以看到如何https://github.com/zendframework/zf2/blob/master/library/Zend/Paginator/Adapter/DbSelect.php
如果您使用distinct或group by子句,count函数计算的计数可能会有所不同。
有两种解决方案。 1)提出问题并等待他们解决问题 2)编写自己的适配器
我会选择第二个。 ZF2 最棒的事情之一是它为您提供了根据您的需要编写所有内容的灵活性。所以继续创建您自己的适配器