[英]How to get most popular categories?
我需要显示最受欢迎的类别,这意味着课程最多的类别。 我有一个数据库模式,其中包括:
tbl_categories:id, name ; tbl_category_courses: cat_id, course_id ; tbl_courses: id,name,description
我的逻辑是,首先获取所有类别,然后在foreach类别之后计算所有课程。
$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;
}
}
到目前为止,这是我的代码,我只能检索类别以及每个类别有多少门课程,但是我无法对其进行过滤。 我只需要显示前十名。有人可以提供一些指导和帮助吗? 在foreach循环中进行计数查询也是我知道的设计不好,我该如何改进此代码,因为我将需要在主应用程序页面上使用它,并且它需要平稳运行。
如果要在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不够熟悉,无法使用这种格式编写它。 希望对您有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.