QueryBuilder - IN 表达式

亚历克西斯

我创建了一个测验,如果人们对所有问题的回答都正确,以及他们完成测验所用的时间,我会在数据库中记录。

我正在尝试创建一个查询构建器来检索在最短的时间内回答最多问题的人。

我的桌子看起来像这样: 在此处输入图片说明

因此,我在数据库中的 SQL 中所做的请求(有效)是:

SELECT 
  id
FROM
  public.user_quizz
WHERE 
  quizz_id = 4
  AND 
    number_correct_answers IN (SELECT max(number_correct_answers) FROM user_quizz WHERE quizz_id = 4)
  AND 
    answered_in IN (SELECT min(answered_in) FROM user_quizz WHERE quizz_id = 4);

当然,我不知道这是否是我们在这种情况下可以做的最好(也是最优化)的请求,但它确实有效。

现在,我正在尝试将此查询转换为 querybuilder。

我被IN表达式阻止了我不知道我怎么能在这里做 SELECT 。

$qb = $this->createQueryBuilder('u');

        $query = $qb->select('u')
            ->andWhere(
                $qb->expr()->eq('u.quizz', ':quizzId'),
                $qb->expr()->in(
                    'u.numberCorrectAnswers',

                )
            )
            ->setParameter('quizzId', $quizz->getId())
            ->getQuery()
        ;

谢谢你的帮助。

卢宁罗马
$qbSelectMax = $this->createQueryBuilder('uc')  // user copy, to prevent alias collisions
$qbSelectMax
   ->select($qb->expr()->max('uc.numberCorrectAnswers'))
   ->where($qb->expr()->eq('uc.quizz', ':quizzId'));      

$qb = $this->createQueryBuilder('u')
$query = $qb->select('u')
    ->andWhere(
        $qb->expr()->eq('u.quizz', ':quizzId'),
        $qb->expr()->in(
            'u.numberCorrectAnswers',
            $qbSelectMax->getDQL()
        )
    )
    ->setParameter('quizzId', $quizz->getId())
    ->getQuery();

您可以创建子 DQL 查询以先选择 max numberCorrectAnswers,然后将 DQL 直接传递给in参数

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章