【问题标题】:How can I select row with oldest date with dql Doctrine querybuilder?如何使用 dql Doctrine querybuilder 选择日期最旧的行?
【发布时间】:2016-09-30 15:14:33
【问题描述】:

我正在尝试计算用户在 SO 等问答网站上回答问题的平均时间。我正在使用 Symfony 和 Doctrine。下面的代码给出了一个结果,但这不是我要找的结果。它给出了所有个答案的平均值,我希望它给出第一个个答案的平均值。

$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 错误。

我怎样才能做到这一点?

【问题讨论】:

    标签: symfony doctrine dql


    【解决方案1】:

    您需要的是仅加入每个问题的最旧答案。您可以在 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

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      相关资源
      最近更新 更多