symfony - 忽略重复的数字的学说限制
问题描述
我正在使用 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 个最好的分数,但所有用户都获得了这个分数。
我怎样才能编辑我的查询来做到这一点?
解决方案
您应该使用子查询选择所有得分最高的用户,例如:
$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();
希望这有帮助
推荐阅读
- c# - C# 使用类型参数将子类转换为父接口失败
- amazon-web-services - Cfn-hup 在更新堆栈时不运行
- javascript - Javascript - 如何按 3 种不同的属性类型对对象数组进行排序?(字符串、整数、布尔值)
- unit-testing - 无法在 GoLand IDE 内的测试套件中运行单个测试?
- javascript - jsp中如何获取表的行索引
- jenkins - 为未来日期安排 Jenkins 工作
- r - R:警告消息:来自秩不足拟合的预测可能具有误导性
- java - sqlite 打开数据库:'./sqlite.db':权限被拒绝
- xamarin - 如何在 Android 的 xamarin 表单中从 customwebview 渲染器更新进度条?
- c# - 如何在 C# Windows 窗体中登录(从 MySQL 服务器/数据库获取数据)?