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

Php 原则:计数结果返回的结果多于获取结果,php,zend-framework,doctrine,doctrine-orm,Php,Zend Framework,Doctrine,Doctrine Orm,我有一个条令查询,可以返回属于某个特定商店的所有客户。总共返回了29条记录。然而,如果我使用几乎相同的DQL运行计数查询,我会得到不同数量的结果 查询1-获取结果: SELECT c FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3) 返回(使用count()计算返回的记录数) 查询2-计数结果: SELECT count(c) FROM Customer c INNER JOIN c.shops cs WHERE cs.

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

查询1-获取结果:

SELECT c FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3)
返回(使用count()计算返回的记录数)


查询2-计数结果:

SELECT count(c) FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3)
重新运行:

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


我似乎不知道这是怎么发生的?希望有人能帮你…

我认为你必须“按(c)分组”

你必须考虑这样一种情况,如果你有同一个客户与两个商店有关联,在原始SQL区域,你将得到两行

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


通过回显Doctrine从查询中生成的SQL
$qb->getSQL()
,并通过Phpmyadmin、MySQL Workbench或Sequel Pro之类的工具执行它,并将其与从
getResults()

返回的结果进行比较,可以最好地直观地看出这种差异。顺便说一句,获取是正确的,这两家商店有29位独特的客户。我猜36包含重复项,但为什么同一个查询会返回不同的列表?一个
count(*)
count(id)
?count(id)返回相同的结果,而您不能在理论中执行count(*)。似乎有一个隐含的明显的地方,我没有要求…似乎只有选择一个单一的字段(c.id,或c.name)回到给你36。怀疑这是一种学说“特征”
array(1) { [0]=> array(1) { [1]=> string(2) "36" } }