Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取MySQL表中每个类别的行数_Php_Mysql_Sql_Optimization - Fatal编程技术网

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

Php 获取MySQL表中每个类别的行数,php,mysql,sql,optimization,Php,Mysql,Sql,Optimization,让我说一下,我有两个表类别和问题。 在问题表中,我在同一类别下有几个或多个问题,表中有不同类别的问题 我需要问题表下每个类别的行数 类别: +----+--------+--+ |身份证|姓名|| +----+--------+--+ |1 |类型1 || |2 |类型2 || |3 |类型3 || +----+--------+--+ 问题 +----+------+-------+ |id | name | catid| +----+------+-------+ |1 | a | 1|

让我说一下,我有两个表类别问题。 在问题表中,我在同一类别下有几个或多个问题,表中有不同类别的问题

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

类别:
+----+--------+--+ 
|身份证|姓名||
+----+--------+--+
|1 |类型1 ||
|2 |类型2 ||
|3 |类型3 ||
+----+--------+--+

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

category\u 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];
}
我的问题是

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];
}
  • 我们可以使用sql查询高效地获取计数数组,而不是在代码中进行
  • 如果没有,请帮助我优化代码

  • T!A.

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

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

    请把桌子包括进来好吗?您可以使用
    foreach
    中的.missing括号和
    if
    检查并更新.marijnz0r KTAnj。。非常感谢你的回答。我在选择答案时有点困惑,因为两者都很相似。谢谢你的回答