Как получить самые популярные категории? - PullRequest
1 голос
/ 09 февраля 2012

Мне нужно показать самые популярные категории, то есть категории с наибольшим количеством курсов. У меня есть схема базы данных, которая включает в себя:

tbl_categories:id, name ; tbl_category_courses: cat_id, course_id ; tbl_courses: id,name,description

Моя логика заключалась в следующем: сначала получить все категории, а после каждой категории подсчитать все курсы.

$query = $this->db->select('*')
                      ->from('categories')
                      ->limit($limit)
                      ->get();

    $data = array();

    if ($query->num_rows() > 0)
    {
        foreach ($query->result() as $row)
        {
            $nr_of_courses = $this->db->select('*')
                                      ->from('course_categories')
                                      ->where('course_categories.category_id', $row->id)
                                      ->join('courses', 'courses.id=course_categories.course_id')
                                      ->count_all_results();

            $row->course_number = $nr_of_courses;
            $data[] = $row;
        }
    }

Это мой код до сих пор, и все, что я могу получить, - это категории с количеством курсов, которые есть у каждого, но я не могу их отфильтровать. Мне нужно показать только топ-10. Может кто-нибудь дать несколько указаний и помочь. Кроме того, выполнение запроса подсчета в цикле foreach, который я знаю, является плохим дизайном, как я могу улучшить этот код, потому что мне нужно будет использовать его на главной странице приложения, и он должен работать гладко.

1 Ответ

0 голосов
/ 09 февраля 2012

Если вы хотите сделать это в SQL, в зависимости от вашего фактического типа базы данных:

select top 10
  cat.name,
  count(distinct course_id) as cnt
from
  course_categories cc
join
  categories cat
    on cat.cat_id=cc.cat_id
group by
  cat.name
order by
 count(distinct cc.course_id) desc

Я недостаточно знаком с (я предполагаю) linq, чтобы написать его в этом формате. Я надеюсь, что это помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...