如何计算值列在MySQL列中的次数?

时间:2014-03-05 15:55:05

标签: php mysql

我有一个名为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。

2 个答案:

答案 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个不同列中的每个列的总数。