【问题标题】:Getting the count of rows in each category in a MySQL table获取 MySQL 表中每个类别的行数
【发布时间】:2015-05-29 17:24:27
【问题描述】:

让我说,我有两个表 categoryquestions。 在问题表中,同一类别下的问题很少或更多,并且表中有各种类别的问题。

我需要问题表下每个类别的行数。

Category: +----+--------+--+ | id | name | | +----+--------+--+ | 1 | Type 1 | | | 2 | Type 2 | | | 3 | Type 3 | | +----+--------+--+

Questions +----+------+-------+ | id | name | catid | +----+------+-------+ | 1 | a | 1 | | 2 | b | 1 | | 3 | c | 1 | | 4 | d | 2 | | 5 | e | 2 | | 6 | f | 3 | +----+------+-------+

category_count = [3,2,1]

我所做的是

if($model){
        $i = 0; $j = 0;
        $category_count = 0;
        $count [] = null;

        foreach($model as $question) {
            $category_count++;
            if(isset($output))
                if($question->catid != $output[$i-1]['cat'] ){
                    $count[$j] = $category_count;
                    $j++;
                    $category_count = 0;
                }
            $output[$i++] = ['id' => $question->id, 'cat' => $question->catid, 'title' => $question->title];
        }
        $count[$j]=$category_count;
        $final = ['count'=>$count, 'questions'=>$output];
}

我的问题是

  1. 我们可以使用 sql 查询 有效地获取计数数组,而不是在代码中进行。
  2. 如果没有,请帮我优化代码。

T!A.

【问题讨论】:

  • 能否请您附上这些表格?你可以使用this
  • foreach 中缺少括号和if 检查并更新。
  • marijnz0r KTAnj .. 非常感谢您的回答。我在选择答案时有点困惑,因为两者都很相似。

标签: php mysql sql optimization


【解决方案1】:

根据表的 DDL,您的查询应如下所示:

SELECT c.name, COUNT(*) 
FROM category c
JOIN questions q
ON q.catid = c.id
GROUP BY c.name

【讨论】:

    【解决方案2】:
    SELECT ca.name, COUNT(*) 
      FROM questions qu
     INNER JOIN questions ca
        ON qu.catid = ca.id
     GROUP BY qu.catid
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      相关资源
      最近更新 更多