在mysql中获取多个"行数"

Jaf*_*ali -1 php mysql

我有一个问题表,每个问题的硬度等级从1到4,我想得到同一级别的问题行数.

这是我试过的:

   $result1 = mysqli_query($con,"SELECT * from questions WHERE level=1");
   $result2 = mysqli_query($con,"SELECT * from questions WHERE level=2");
   $result3 = mysqli_query($con,"SELECT * from questions WHERE level=3");
   $result4 = mysqli_query($con,"SELECT * from questions WHERE level=4");

   $n1 = mysqli_num_rows($result1);
   $n1 = mysqli_num_rows($result2);
   $n1 = mysqli_num_rows($result3);
   $n1 = mysqli_num_rows($result4);
Run Code Online (Sandbox Code Playgroud)

好吧,它是如此糟糕,并使用四个查询来做到这一点.
在我的脑海里另一种方式是使用PHP:

   $level = array(0,0,0,0);

   $result = mysqli_query($con,"SELECT * from questions");
   while($res = mysqli_fetch_array($result)){
      switch ($res['level']){
     case '1':
        $level[0]++;
        break;

     case '2':
        $level[1]++;
        break;

     case '3':
        $level[2]++;
        break;

     case '4':
        $level[3]++;
        break;

     default:
        echo "WTF";

      }
   }
   echo "LEVEL 1 :$level[0]<br>LEVEL 2 :$level[1]<br>LEVEL 3 :$level[2]<br>LEVEL 4 :$level[3]<br>";
Run Code Online (Sandbox Code Playgroud)

这使用php而不是mysql,但看起来更快.有没有其他更快的方法来实现这一目标?什么是最好的方式?

Gor*_*off 6

我想你只想要一个group by查询:

SELECT level, count(*)
FROM questions
GROUP BY level;
Run Code Online (Sandbox Code Playgroud)

编辑:

如果使用条件聚合来获取一行数据,则可能更容易:

SELECT SUM(level = 1) as num1, SUM(level = 2) as num2,
       SUM(level = 3) as num3, SUM(level = 4) as num4 
FROM questions;
Run Code Online (Sandbox Code Playgroud)

这会在一行中生成四个变量,您可以在php中轻松访问这些变量.