2013-03-13 3 views
0

I가 다음과 같은 쿼리를 계산 GROUPBY :교리 다중 행 교리

$q = Doctrine_Query::create() 
    ->select("q.id, q.user_id, count(ua.id) as quantity") 
    ->from("question q") 
    ->leftJoin("q.Answers a") 
    ->leftJoin("a.UserAnswers ua") 
    ->groupBy("ua.user_id"); 

생성 된 SQL은 다음과 같습니다

SELECT q.id AS q__id, q.user_id AS q__user_id, COUNT(u.id) AS u__0 FROM question q LEFT JOIN answer a ON q.id = a.question_id LEFT JOIN user_answer u ON a.id = u.answer_id GROUP BY u.user_id 

와 MySQL이 쿼리의 결과 것은 같은 것입니다 :

+-------+------------+------+ 
+ q__id + q__user_id + u__0 + 
+-------+------------+------+ 
+  1 +   1 + 0 + 
+-------+------------+------+ 
+ 26 +   6 + 2 + 
+-------+------------+------+ 
+ 26 +   6 + 1 + 
+-------+------------+------+ 

Doctrine을 사용하면 "u__0"열 값을 얻을 수있는 방법이 있습니까?

내가 시도 :

$questions = $q->execute(); 
echo (count($questions)); 

하지만 결과는 2 행 (안 3)가 있습니다.

"u__0"열 값을 어떻게 얻을 수 있습니까? (0, 2, 1) Doctrine을 사용합니까?

답변

1

:

$q = Doctrine_Query::create() 
    ->select("q.id, q.user_id, a.id, count(ua.id) as quantity") 
    ->from("Answer a") 
    ->leftJoin("a.Question q") 
    ->leftJoin("a.UserAnswers ua") 
    ->groupBy("ua.user_id"); 

그리고 그것은 작동)

2

는 각 결과에 대한 루프가 있고 quantity 값 검색 : I가 SQL 쿼리를 변경

$q = Doctrine_Query::create() 
    ->select("q.id as id, q.user_id as question_user_id, ua.user_id as answer_user_id, count(ua.id) as quantity") 
    ->from("question q") 
    ->leftJoin("q.Answers a") 
    ->leftJoin("a.UserAnswers ua") 
    ->groupBy("answer_user_id"); 

$results = $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY); 
foreach ($results as $result) 
{ 
    var_dump($result['quantity']); 
} 
+0

내 질문은 사용입니다 doctrine 나는 단지 2 개의 결과를 얻습니다. (평이한 SQL에서는 3 개의 결과를 얻습니다.) Doctrine은 마지막 결과 두 개를 하나씩 "그룹화"한다고 생각합니다. – Pipe

+0

@Pipe oh 나는 본다! 죄송합니다. 오해, 대답을 업데이트했습니다. 어쩌면 교리에 별명을 사용하도록 강요하면 잘 될 것입니다. 그건 그렇고, 당신은 선택에 ua.user_id를 추가해야한다고 생각합니다. – j0k

+0

nop이면 오류가 발생합니다. 별칭 'a'와 'ua'사이의 조인 왼쪽에 적어도 기본 키 필드가 선택되어 있어야합니다. – Pipe