【发布时间】:2017-04-17 10:52:30
【问题描述】:
我只想订购前一个主查询的结果。
我想要前 10 篇浏览次数最多的文章,然后按“添加日期”DESC 对其进行排序。
我知道诸如 orderBy 甚至 addOrderBy 之类的功能,但这不是我需要的,或者我没有正确实现它。
5 篇文章中获得前 2 名的示例:
- 名称:一个||浏览量:100 ||添加时间:10/04/2017
- 名称:b ||浏览量:10 ||添加时间:17/04/2017
- 名称:c ||浏览量:50 ||添加时间:15/04/2017
- 姓名:d ||浏览量:25 ||添加时间:12/04/2017
- 名称:e ||浏览量:200 ||添加时间:05/04/2017
我首先提取最多的观点:
- e 条
- a 条
然后按addedAt date DESC(最近一次)排序:
- a 条
- e 条
我的查询:
public function findMostViewed($limit=10, $asArray=false)
{
$qb = $this->createQueryBuilder('n')
->orderBy('n.nbViews', 'DESC')
//->addOrderBy('n.addedAt', 'DESC')
->getQuery()
->setMaxResults($limit);
return ($asArray) ? $qb->getResult(Query::HYDRATE_ARRAY) : $qb->getResult();
}
如果我知道如何执行 preSelectQuery,它可能会解决问题...
我想到了一个 SQL 查询:
SELECT ...
FROM ...
WHERE id IN(SELECT id FROM News ORDER BY nbViews DESC LIMIT 10)
ORDER BY addedAt DESC
【问题讨论】:
标签: php doctrine-orm symfony-2.8