2014-03-05 131 views
1

我有一个叫做Reports的MySQL表格,里面有一个名为Status的列。这设置为打开,待定或关闭。我需要能够计算分别设置为“打开”,“关闭”和“待定”的报告数量。我还需要将这些数字放入单个变量中以便在图形中使用。如何计算某个值在MySQL列中出现的次数?

我在网站上使用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

我想你错过了​​命令?您可能还想使用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了一段时间,可能是错的,但给它一个尝试..

+0

我试过这个,发生了什么,虽然不知道是什么。结果如下。 array(2){[“status”] => string(6)“Closed”[“COUNT(*)”] => string(2)“23”} array(2){[“status”] => string (4)“Open”[“COUNT(*)”] => string(1)“1”} array(2){[“status”] => string(7)“Pending”[“COUNT(*)” ] => string(1)“3”} array(2){[“status”] => string(7)“Removed”[“COUNT(*)”] => string(2)“10”} – user3384224

+0

你的结果:)我更新了我的答案(在foreach中)以更好地格式化结果。我只是使用'var_dump()'将所有内容扔到屏幕上。 – BT643

+0

我也更新了查询以包含有关日期的问题。认为会起作用。不知道你是否想要可变日期? – BT643

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您可以将其用于图形的不同列。

相关问题