我有一个名为Reports的MySQL表,其中有一个名为Status的列。这设置为“打开”,“待定”或“已关闭”。我需要能够计算分别设置为打开,关闭和待定的报告数量。我还需要将这些数字放入单个变量中,以便在图表中使用。
我在网站上使用PDO,并且可以轻松添加,编辑和检索数据,但我无法让我的生活得以实现。我发现PDO非常混乱且难以学习,因为在我可以在网上找到的所有示例中,每个人似乎都使用完全不同的格式,语法和变量名称。我不知道我是否在这个问题的正确轨道上。这是我到目前为止所提出的内容;
try {
$DBH = new PDO("mysql:host=localhost;dbname=$dbname",$dbuser,$dbpass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->prepare("SELECT status, COUNT(*) FROM reports GROUP BY status");
$result = $STH->fetch();
}
catch(PDOException $e) {
echo $e->getMessage();
}
我没有任何错误或任何错误。我怎么能解决这个问题呢?
作为一项额外功能,我希望能够只计算某些日期之间提交的条目的值。我的数据库中已有一个日期列。
我是否在正确的轨道上?完全关闭?我可以使用直接的MySQL查询使这项工作没有问题,但不能用PDO。
答案 0 :(得分:0)
我认为你错过了execute()
命令?您可能还想使用fetchAll
代替fetch
来获取所有内容。
try {
$DBH = new PDO("mysql:host=localhost;dbname=$dbname",$dbuser,$dbpass);
$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$STH = $DBH->prepare("SELECT status, COUNT(*) AS count FROM reports WHERE date_field BETWEEN :start_date AND :end_date GROUP BY status");
$STH->execute(array(':start_date' => $start_date_variable, ':end_date' => $end_date_variable));
$rows = $STH->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
echo $row['status'] . " = " . $row['count'];
}
}catch(PDOException $e) {
echo $e->getMessage();
}
认为你目前没有真正运行查询?有一段时间没有使用PDO所以可能是错的,但试一试..
答案 1 :(得分:0)
你需要这样的效果:
SELECT sum(
IF (
COALESCE (status, '') = 'Open',
1,
0
)
) AS total_open,
sum(
IF (
COALESCE (status, '') = 'Closed',
1,
0
)
) AS total_closed,
sum(
IF (
COALESCE(status, '') = 'Pending ',
1,
0
)
) AS total_pending
FROM reports
这应该为您提供可用于图表的3个不同列中的每个列的总数。