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

时间:2012-02-09 15:58:36

标签: php sql oop codeigniter

我需要展示最受欢迎的类别,这意味着课程数量最多的类别。我有一个数据库模式,其中包括:

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循环中进行计数查询我知道是糟糕的设计,我如何改进这个代码,因为我需要在主应用程序页面上使用它,它需要顺利运行。

1 个答案:

答案 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,使用该格式编写它。 我希望有所帮助。