如何计算包含特定值的行数

时间:2014-12-12 19:20:44

标签: php mysql jpgraph

我正在计算有多少'返回'有价值的' 1'每月。这是我到目前为止所得到的:

$data1y=array();
$data2y=array();

$months_sql = array();


for ($i = 1; $i <= 12; $i++) {
    $months_sql[] = date("F", strtotime( date( 'Y-m-01' )." -$i months"));
}


    $sql = "SELECT returned, MONTHNAME( date_in) AS date_in
        FROM item
        WHERE  date_in >= NOW() - INTERVAL 1 YEAR";

    $query = mysql_query($sql);


    foreach($months_sql as $month)
    {
        while ($row = mysql_fetch_array($query))
        {
            if($row['date_in'] = $month && $row['returned']=='1')
            {
                $counter_returned++;
            }
            $counter_total++;
        }
        $data1y[] = $counter_returned++;
        $data2y[] = $counter_total++;;
    }

我想要的是在两个数组中存储每个mont总共有多少条记录,以及每月有多少条记录。

1 个答案:

答案 0 :(得分:-1)

你的循环是错误的。你只需要检查你的months_sql数组中的第一个月(11月,我想?)。对于下个月,您将不再需要获取数据库结果。

您需要切换它们,如果您这样做,您的计数器需要确定它们属于哪个月,因为您的数据库数据不会每个月被处理:

while ($row = mysql_fetch_array($query))
{
    foreach($months_sql as $month)
    {
        if($row['date_in'] == $month)
        {
            if($row['returned']=='1')
            {
                $data1y[$month]++;
            }
            $data2y[$month]++;
        }
    }
}

使用count()

执行此操作的更快捷方式
$sql = "SELECT MONTHNAME( date_in) AS date_in, returned, count(*) as count
    FROM item
    WHERE  date_in >= NOW() - INTERVAL 1 YEAR
    GROUP BY date_in, returned;";
$query = mysql_query($sql);

while ($row = mysql_fetch_array($query))
{
    if(in_array($row['date_in'], $months_sql))
    {
        if($row['returned']=='1')
        {
            $data1y[$month] = $row['count'];
        }
        $data2y[$month] += $row['count'];
    }
}

在任何一种情况下,如果您希望每月将数据初始化为0,请在数据库查询之前添加:

foreach($months_sql as $month){
    $data1y[$month]=0;
    $data2y[$month]=0;
}