如何在一个数据库请求中计算不同的mysql行?

时间:2017-04-19 15:59:59

标签: mysql pdo count

$pdo = $db->query('SELECT * FROM data ;');
$total = $pdo->rowCount();  
echo $total;

结果是3

但我在mySQL数据库中有一个名为“done”的列,其中可能的值为10

我现在想要计算值为1的所有行。因此,如果数据库中有总共9个元素,并且有三个值为1的项目,那么结果应为:

3/9

我知道只知道如何使用第二个数据库请求

 $pdo = $db->query('SELECT * FROM data WHERE done = "1"  ;');
 $done = $pdo->rowCount();  

 echo $done."/".$total;

但我想知道这是否只能在一个数据库请求中实现。

2 个答案:

答案 0 :(得分:4)

尝试使用此查询,并从结果中获取信息(不是行数)

SELECT `done`, count(*) as `numrows` FROM `data` GROUP BY `done`;

答案 1 :(得分:1)

MySQL支持SUM中的表达式,因此如果您希望同时获得总计数和过滤计数,则可以执行此操作:

SELECT COUNT(*) as totalCount, SUM(`done`=1) as completeCount FROM `data`

如果需要,您还可以添加“未完成”计数:

SELECT COUNT(*) as totalCount, SUM(`done`=1) as completeCount, SUM(`done`=0) as incompleteCount FROM `data`

使用您的代码:

$query = 'SELECT COUNT(*) as total, SUM(`done`=1) as complete FROM `data`';
$pdo = $db->query($query);
$data = $pdo->fetch(); // Uses PDO::FETCH_BOTH by default  
echo $data['complete']."/".$data['total'];
相关问题