我需要展示最受欢迎的类别,这意味着课程数量最多的类别。我有一个数据库模式,其中包括:
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;
}
}
这是我的代码,直到现在,我可以检索的是具有每个课程数量的类别,但我无法过滤它们。我需要只显示前10名。 有人可以提供一些指导和帮助。另外在foreach循环中进行计数查询我知道是糟糕的设计,我如何改进这个代码,因为我需要在主应用程序页面上使用它,它需要顺利运行。
答案 0 :(得分:0)
如果您想在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,使用该格式编写它。 我希望有所帮助。