Php 如何从一列中计算具有不同值的行

Php 如何从一列中计算具有不同值的行,php,mysql,Php,Mysql,我有一个问题,要从一列中用不同的值计算行数,这是我的数据库和查询 $host = 'localhost'; $db = 'cbt'; $user = 'root'; $pass = ''; $dsn = "mysql:host=$host;dbname=$db"; $pdo = new PDO($dsn, $user, $pass); $matematika = 'MTK'; $soal_mtk = $pdo->prepare("select count(*) from cbt.d

我有一个问题,要从一列中用不同的值计算行数,这是我的数据库和查询

$host = 'localhost';
$db   = 'cbt';
$user = 'root';
$pass = '';

$dsn = "mysql:host=$host;dbname=$db";
$pdo = new PDO($dsn, $user, $pass);

$matematika = 'MTK';
$soal_mtk = $pdo->prepare("select count(*) from cbt.data_ujian where data_ujian.id_mapel = :mtk");
$soal_mtk->bindParam(':mtk', $matematika, PDO::PARAM_STR, 12);
$soal_mtk->execute();
$mtk = $soal_mtk->fetchColumn();

$fisika = 'FIS';
$soal_fis = $pdo->prepare("select count(*) from cbt.data_ujian where data_ujian.id_mapel = :fis");
$soal_fis->bindParam(':fis', $fisika, PDO::PARAM_STR, 12);
$soal_fis->execute();
$fis = $soal_fis->fetchColumn();

$kimia = 'KIM';
$soal_kim = $pdo->prepare("select count(*) from cbt.data_ujian where data_ujian.id_mapel = :kim");
$soal_kim->bindParam(':kim', $kimia, PDO::PARAM_STR, 12);
$soal_kim->execute();
$kim = $soal_kim->fetchColumn();

我可以用一个查询来计算所有这些吗??如果需要更多信息,请告诉我。非常感谢您。

如果我没听错,GROUP BY子句应该满足您的要求:

SELECT count(*), id_mapel FROM cbt.data_ujian GROUP BY id_mapel

是的,您可以,您需要使用WHERE条件。像这样,

SELECT count(*),
       data_ujian.id_mapel
FROM cbt.data_ujian
WHERE (data_ujian.id_mapel = :mtk
       OR data_ujian.id_mapel = :fis
       OR data_ujian.id_mapel = :kim)
GROUP BY data_ujian.id_mapel

上述查询将按
id\u mapel
列对结果进行分组,并给出每个类别的
计数。

尝试以下查询-

SELECT Sum(data_ujian.id_mapel = 'mtk') AS 'mtk', 
       Sum(data_ujian.id_mapel = 'fis') AS 'fis', 
       Sum(data_ujian.id_mapel = 'kim') AS 'kim', 
FROM   cbt.data_ujian; 

cbt.data\u ujian和data\u user之间有关系吗?没有。我只想用一个问题数一数mtk、fis和kim,那么你问题顶部的表格创建语句有什么意义?!?我把它贴在我的笔记本上。我只是不明白为什么。看起来结果是从id\u mapel向后的,它是从上一个id\u mapel回音的,或者更确切地说,我取错了,但还是要谢谢你。请看MySQL的
IN()
构造。是的,我们也可以使用
IN()
你能解释一下如何取id\u mapel并计数吗?我使用foreach,但它只打印了count或id\u mapel。从上面的查询中得到的结果将是多维数组,它将有两个键,分别是该组的
group\u name(id\u mapel)
count
。您可以迭代该数组并显示每个组的计数。