$pdo = $db->query('SELECT * FROM data ;');
$total = $pdo->rowCount();
echo $total;
结果是3
。
但我在mySQL数据库中有一个名为“done”的列,其中可能的值为1
或0
。
我现在想要计算值为1
的所有行。因此,如果数据库中有总共9
个元素,并且有三个值为1
的项目,那么结果应为:
3/9
我知道只知道如何使用第二个数据库请求
$pdo = $db->query('SELECT * FROM data WHERE done = "1" ;');
$done = $pdo->rowCount();
echo $done."/".$total;
但我想知道这是否只能在一个数据库请求中实现。
答案 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'];