首页 > 解决方案 > 忽略重复的数字的学说限制

问题描述

我正在使用 Symfony 3.4,并且我的用户存储库中有一个请求。

我想要基于分数的前 5 名用户。因此,我创建了我的请求,其中按分数列排序并限制为 5 个结果。

  $query =  $this->createQueryBuilder('u')
            ->orderBy('u.score', 'DESC')
            ->setMaxResults(5)
            ->getQuery()
            ->getResult();

但我希望前 5 名以相同的分数获得用户。例如:

用户:分数

杰克:100

米克:50

乔:10

丹尼尔:25

弗雷德:75

詹姆斯:100

比利:2

我想返回 6 个结果(因为两个用户的分数相同)。我想要的是

杰克

詹姆士

弗雷德

米克

丹尼尔

如果我有其他用户的分数与 Mick 相同,它应该返回 7 结果。

结果的数量返回前 5 个最好的分数,但所有用户都获得了这个分数。

我怎样才能编辑我的查询来做到这一点?

标签: symfonydoctrine-ormquery-builder

解决方案


您应该使用子查询选择所有得分最高的用户,例如:

$subQuery =  $this->createQueryBuilder('u1')
            ->select('DISTINCT u1.score')
            ->orderBy('u1.score', 'DESC')
            ->setMaxResults(5)
            ->GetDQL();

$query = $this->createQueryBuilder('u2');

$query->where(
             $query->expr()->in(
                    'u2.score', $subquery))
            ->orderBy('u2.score', 'DESC')
            ->getQuery()
            ->getResult();

希望这有帮助


推荐阅读