php - 获取 MySQL 表中每个类别的行数

标签 php mysql sql optimization

比方说,我有两个表类别问题。 在问题表中,同一类别下我有几个或多个问题,并且该表有各种类别的问题。

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

类别: +----+--------+--+ |编号 |姓名 | | +----+--------+--+ | 1 |类型 1 | | | 2 |类型 2 | | | 3 |类型 3 | | +----+--------+--+

问题 +----+------+------+ |编号 |姓名 |猫咪 | +----+------+------+ | 1 |一个 | 1 | | 2 |乙 | 1 | | 3 | c | 1 | | 4 | d | 2 | | 5 |电子 | 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.

最佳答案

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

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

关于php - 获取 MySQL 表中每个类别的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30525020/

相关文章:

php - 使用数组对 Mysql 请求进行重复数据删除

php - 使用 UNION ALL 和 LEFT JOIN 时的限制

python - 从 Python 运行 SQL 文件

sql - 快速左加入问题

php - 如何在 Windows Azure 上部署现有的 WordPress 项目

php - 为什么我不能在 PHP 中创建 MySQL 存储过程?

MySQL 扩展显示

mysql - SQL WHERE 列 = 一切

php - 使用表单中的多个字段搜索 MySQL

php - 将元标记与 PHP 一起用于搜索引擎