Моя таблица комментариев выглядит так:
| ID | article_id | user_id | ...
|-------------------------------|
| 1 | 1 | 1 | ...
| 2 | 2 | 2 | ...
| 3 | 2 | 1 | ...
| 4 | 3 | 2 | ...
И мне нужно получить 5 лучших статей с наибольшим количеством комментариев. Когда я использую это утверждение в консоли SQL SELECT 'article_id', count(*) as 'total' FROM 'comments' GROUP BY 'article_id' ORDER BY 'total' LIMIT 5
тогда я получаю все, что хочу. Но мне нужно сделать это с помощью NotORM, и именно здесь я остановился. Это моя функция, чтобы получить эти статьи:
function getBestActive() {
$items = $this->db->comments()
->select("article_id, count(*) as 'total'")
->order("total DESC")
->limit(5);
$articles = array();
foreach($items as $item) {
$article = $this->db->article('id', $item['article_id'])->fetch();
$article['img'] = "thumb/{$article['uri']}.jpg";
$article['comments'] = $item['total'];
$articles[] = $article;
}
return $articles;
}
Но он возвращает мне массив только с 1 статьей (с наибольшим количеством комментариев), и мне нужно больше 5 статей. Или можно выполнить пользовательский оператор SQL с помощью NotORM (это тоже может быть ответом)?
Ох, теперь я вижу. Я забыл добавить group()
функция. Таким образом, с помощью этого выбора все работает:
$items = $this->db->comments()
->select("article_id, count(*) as 'total'")
->group("article_id")
->order("total DESC")
->limit(5);
Других решений пока нет …