繁体   English   中英

如何获得最受欢迎的类别?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM