2016-09-30 56 views
0

我試圖計算用戶回答Q &這樣的站點上的問題所需的平均時間。我正在使用Symfony和Doctrine。下面的代碼給出了一個結果,但它不是我正在尋找的結果。它給出的平均值爲全部爲的答案,我希望給出的平均值僅爲第一個的答案。如何使用dql Doctrine querybuilder選擇具有最早日期的行?

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb 
    ->select('SUM(UNIX_TIMESTAMP(a.date) - UNIX_TIMESTAMP(q.date))/COUNT(DISTINCT q.id)') 
    ->from(Question::class, 'q') 
    ->join('q.answer', 'a') 
    ; 
return $qb->getQuery()->getSingleScalarResult(); 

我試着在周圍a.date一個MIN()拋,但它給了一個GROUPBY錯誤。

我該如何做這項工作?

回答

0

你需要的是隻加入每個問題最老的答案。你可以實現你的ON子句中使用子查詢

SELECT AVG(UNIX_TIMESTAMP(answer.date) - UNIX_TIMESTAMP(question.date)) as avgFirstResponseTime 
FROM question 
INNER JOIN answer ON answer.id = (
    SELECT id 
    FROM answer 
    WHERE question_id = question.id 
    ORDER BY date ASC 
    LIMIT 1  
) 

我注意到知道這類型的子查詢與理論工作的QueryBuilder或DQL的。但是如果DQL不支持它,你可以使用$entityManager->createNativeQuery