Мне нужно показать самые популярные категории, то есть категории с наибольшим количеством курсов. У меня есть схема базы данных, которая включает в себя:
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, который я знаю, является плохим дизайном, как я могу улучшить этот код, потому что мне нужно будет использовать его на главной странице приложения, и он должен работать гладко.