原则:计数结果返回的结果多于获得结果

时间:2012-07-03 11:32:09

标签: php zend-framework doctrine doctrine-orm

我有一个学说查询,以返回属于特定商店的所有客户。总共返回了29条记录。但是,如果我运行一个计数查询,几乎相同的DQL,我会得到不同数量的结果

Query1 - 获取结果:

SELECT c FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3)

返回(使用count()来计算返回的记录数)

int(29) 


查询2 - 计算结果:

SELECT count(c) FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3)

Retruns:

array(1) { [0]=> array(1) { [1]=> string(2) "36" } }


我似乎无法弄清楚这是怎么回事?希望有人能帮忙......

2 个答案:

答案 0 :(得分:1)

我认为你必须“GROUP BY(c)”

答案 1 :(得分:1)

您必须考虑如果您拥有与两家商店相关联的同一客户的情况,在原始SQL土地上您将获得2行。

Doctrine在返回记录的水合步骤中解释了这一点,即$qb->getQuery()->getResults(),并返回一个有意义的结果集(而不是一个你必须手动处理的重复项)。

您可以通过回显Doctrine从查询$qb->getSQL()生成的SQL并通过Phpmyadmin,MySQL Workbench或Sequel Pro执行它来执行它,并将其与{{1 }}