2013-03-12 2 views
1

이것은 내 doctrine (1.2) 쿼리의 첫 번째 형식이며 페이지 맨 아래에 반환됩니다.MYSQL GroupBy 조인 및 집계 값이 있습니다.

$q = Doctrine_Query::create() 
      ->select('i.id, i.time_estimate, i.assigned_to, ts.time_spent') 
      ->from('Model_Issue i') 
      ->innerJoin('i.User_2 user') 
      ->leftJoin('i.IssuesTimeSpent ts') 
      ->where('i.project_id = ?',$project_id); 

나는 그것으로이 작업을 수행하려고 해요 : 나는 assigned_to ID에 관련된 모든 문제에 소요 된 모든 시간의 합이 사용자 (assigned_to)의 수익을 예상

$q = Doctrine_Query::create() 
      ->select('i.id, sum(i.time_estimate) as time_estimate, i.assigned_to, sum(ts.time_spent) as time_spent') 
      ->from('Model_Issue i') 
      ->innerJoin('i.User_2 user') 
      ->leftJoin('i.IssuesTimeSpent ts') 
      ->where('i.project_id = ?',$project_id) 
      ->groupBy('assigned_to'); 

, time_estimate와 동일합니다.

그러나 이것은 반환되는 것입니다.

array 
    0 => 
    array 
     'id' => string '1' (length=1) 
     'assigned_to' => string '1' (length=1) 
     'time_estimate' => string '238' (length=3) <- this is wrong 
     'time_spent' => string '72' (length=2) <- this is correct i believe 
    1 => 
    array 
     'id' => string '7' (length=1) 
     'assigned_to' => string '2' (length=1) 
     'time_estimate' => string '3' (length=1) <- this is wrong 
     'time_spent' => string '30' (length=2) <- this is correct i believe 

나는 올바른 것을 시도하고 있으며, 출력은 내가 원하는대로 groupby 및 집계 값으로 얻을 수 있습니까? 아니면 특별한 것을해야합니까?

안부,

N.B. groupby/sums 전에 전체 배열

array 
     0 => 
     array 
      'id' => string '1' (length=1) 
      'time_estimate' => string '4' (length=1) 
      'assigned_to' => string '1' (length=1) 
      'IssuesTimeSpent' => 
      array 
       0 => 
       array 
        'id' => string '1' (length=1) 
        'time_spent' => string '2' (length=1) 
       1 => 
       array 
        'id' => string '40' (length=2) 
        'time_spent' => string '1' (length=1) 
     1 => 
     array 
      'id' => string '2' (length=1) 
      'time_estimate' => string '6' (length=1) 
      'assigned_to' => string '1' (length=1) 
      'IssuesTimeSpent' => 
      array 
       0 => 
       array 
        'id' => string '2' (length=1) 
        'time_spent' => string '4' (length=1) 
       1 => 
       array 
        'id' => string '5' (length=1) 
        'time_spent' => string '3' (length=1) 
       2 => 
       array 
        'id' => string '6' (length=1) 
        'time_spent' => string '3' (length=1) 
       3 => 
       array 
        'id' => string '8' (length=1) 
        'time_spent' => string '1' (length=1) 
       4 => 
       array 
        'id' => string '9' (length=1) 
        'time_spent' => string '1' (length=1) 
       5 => 
       array 
        'id' => string '10' (length=2) 
        'time_spent' => string '1' (length=1) 
       6 => 
       array 
        'id' => string '11' (length=2) 
        'time_spent' => string '1' (length=1) 
       7 => 
       array 
        'id' => string '12' (length=2) 
        'time_spent' => string '2' (length=1) 
       8 => 
       array 
        'id' => string '13' (length=2) 
        'time_spent' => string '1' (length=1) 
       9 => 
       array 
        'id' => string '14' (length=2) 
        'time_spent' => string '1' (length=1) 
       10 => 
       array 
        'id' => string '15' (length=2) 
        'time_spent' => string '1' (length=1) 
       11 => 
       array 
        'id' => string '16' (length=2) 
        'time_spent' => string '1' (length=1) 
       12 => 
       array 
        'id' => string '17' (length=2) 
        'time_spent' => string '1' (length=1) 
       13 => 
       array 
        'id' => string '18' (length=2) 
        'time_spent' => string '1' (length=1) 
       14 => 
       array 
        'id' => string '19' (length=2) 
        'time_spent' => string '1' (length=1) 
       15 => 
       array 
        'id' => string '20' (length=2) 
        'time_spent' => string '1' (length=1) 
       16 => 
       array 
        'id' => string '21' (length=2) 
        'time_spent' => string '1' (length=1) 
       17 => 
       array 
        'id' => string '22' (length=2) 
        'time_spent' => string '1' (length=1) 
       18 => 
       array 
        'id' => string '23' (length=2) 
        'time_spent' => string '1' (length=1) 
       19 => 
       array 
        'id' => string '24' (length=2) 
        'time_spent' => string '1' (length=1) 
       20 => 
       array 
        'id' => string '25' (length=2) 
        'time_spent' => string '1' (length=1) 
       21 => 
       array 
        'id' => string '26' (length=2) 
        'time_spent' => string '1' (length=1) 
       22 => 
       array 
        'id' => string '27' (length=2) 
        'time_spent' => string '1' (length=1) 
       23 => 
       array 
        'id' => string '28' (length=2) 
        'time_spent' => string '1' (length=1) 
       24 => 
       array 
        'id' => string '29' (length=2) 
        'time_spent' => string '1' (length=1) 
       25 => 
       array 
        'id' => string '30' (length=2) 
        'time_spent' => string '1' (length=1) 
       26 => 
       array 
        'id' => string '31' (length=2) 
        'time_spent' => string '1' (length=1) 
       27 => 
       array 
        'id' => string '32' (length=2) 
        'time_spent' => string '1' (length=1) 
       28 => 
       array 
        'id' => string '33' (length=2) 
        'time_spent' => string '1' (length=1) 
       29 => 
       array 
        'id' => string '34' (length=2) 
        'time_spent' => string '1' (length=1) 
       30 => 
       array 
        'id' => string '35' (length=2) 
        'time_spent' => string '1' (length=1) 
       31 => 
       array 
        'id' => string '36' (length=2) 
        'time_spent' => string '1' (length=1) 
       32 => 
       array 
        'id' => string '37' (length=2) 
        'time_spent' => string '1' (length=1) 
       33 => 
       array 
        'id' => string '38' (length=2) 
        'time_spent' => string '1' (length=1) 
       34 => 
       array 
        'id' => string '39' (length=2) 
        'time_spent' => string '3' (length=1) 
       35 => 
       array 
        'id' => string '42' (length=2) 
        'time_spent' => string '1' (length=1) 
       36 => 
       array 
        'id' => string '43' (length=2) 
        'time_spent' => string '10' (length=2) 
     2 => 
     array 
      'id' => string '3' (length=1) 
      'time_estimate' => string '4' (length=1) 
      'assigned_to' => string '1' (length=1) 
      'IssuesTimeSpent' => 
      array 
       0 => 
       array 
        'id' => string '3' (length=1) 
        'time_spent' => string '3' (length=1) 
       1 => 
       array 
        'id' => string '41' (length=2) 
        'time_spent' => string '10' (length=2) 
     3 => 
     array 
      'id' => string '7' (length=1) 
      'time_estimate' => string '3' (length=1) 
      'assigned_to' => string '2' (length=1) 
      'IssuesTimeSpent' => 
      array 
       0 => 
       array 
        'id' => string '7' (length=1) 
        'time_spent' => string '30' (length=2) 

답변

0

좋아, 나는 해결책을 찾았다 고 생각합니다. 그것이 가장 좋은 일이든 모르겠어요 ..

$q = Doctrine_Query::create() 
      ->select('i.id, assigned.full_name as full_name, count(i.id) as issue_count, sum(i.time_estimate) as time_estimate, 
       (SELECT sum(ts.time_spent) as t FROM Model_IssuesTimeSpent ts WHERE ts.user_id = i.assigned_to) as time_spent') 
      ->from('Model_Issue i') 
      ->leftJoin('i.User_2 assigned') 
      ->where('i.project_id = ?',$project_id) 
      ->groupBy('assigned_to'); 

timespent의 하위 쿼리를 추가하기보다는 참여는 모든 이상한 숫자를 중지합니다. 그것은 제가 직접 설정 한 그룹 내에서 중복 행을 발생시키는 것 같습니다.