2012-07-03 2 views
1

특정 상점에 속한 모든 고객을 돌려주는 교리 쿼리가 있습니다. 전체적으로 29 개의 레코드가 반환됩니다. 의 수를 계산Doctrine : 계산 결과가 결과를 얻는 것 이상을 반환합니다.

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

반환 (COUNT()를 사용하여 : 가져 오기 결과 - 나는 카운트 쿼리를 실행할 경우, 거의 동일한 DQL으로, 나는 결과

Query1을의 다른 번호를

: 결과를 수 - 기록은

int(29) 


QUERY2) 반환 0

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" } } 


나는 그 일이 될 수있는 방법을 제대로 작동하지 못할? 바라건대 누군가가 당신이 생각 ...

+0

에서 반환 된 것을 비교 -

은 당신은 최고의 교리가 쿼리 $qb->getSQL()에서 생성하는 SQL에서 반향과를 통해 그것을 실행하면 phpMyAdmin, MySQL의 워크 벤치 또는 프로 속편 같은 것을하여이 차이를 시각화 할 수 있습니다 가져 오기가 정확합니다. 29 개의 순 고객이이 두 상점에 할당되어 있습니다. 나는 36이 중복을 포함하고 있다고 생각하지만 같은 쿼리가 다른리스트를 반환하는 이유는 무엇입니까? – YorkshireDeveloper

+0

'count (*)'또는'count (id)'는 어떨까요? – Maerlyn

+0

count (id)가 동일한 결과를 반환하고 doctrine에서 count (*)를 수행 할 수 없습니다. 어딘가에 묻지 않은 암시적인 DISTINCT가있는 것 같습니다 ... – YorkshireDeveloper

답변

1

을 도울 수에 "GROUP BY (C)"

1

당신은 원시, 당신은이 개 상점 협회와 같은 고객이있는 경우 상황을 설명해야 SQL 토지는 2 행을 얻을 것이다.

Doctrine은 기록을 반환하는 수화 단계 (즉, $qb->getQuery()->getResults())에서 이것을 설명하고 수동으로 처리해야하는 중복이 아닌 결과 집합을 반환합니다. 하고 결과를 덧붙여 getResults()

관련 문제