Я хотел бы заказать только результат предыдущего основного запроса.
Я хочу, чтобы 10 самых просматриваемых статей были упорядочены по DESC "добавлено по дате".
Мне известны такие функции, как orderBy или даже addOrderBy, но это не то, что мне нужно, или я неправильно их реализую.
Пример получения первых 2 из 5 статей:
- имя : а || просмотры: 100 || добавлено: 10/04/2017
- имя : б || просмотров : 10 || добавлено: 17.04.2017
- имя : с || просмотров : 50 || добавлено: 15.04.2017
- имя : д || просмотров : 25 || добавлено: 04.12.2017
- имя : е || просмотры: 200 || добавлено: 05/04/2017
Сначала я извлекаю наибольшее количество просмотров:
- Статья д
- Статья а
А затем заказал его по добавленной дате DESC (самый последний):
- Статья а
- Статья д
Мой запрос:
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