2016-09-30 3 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を使用できます。

関連する問題