在PHP中添加循环而不覆盖

时间:2009-11-11 01:32:58

标签: php mysql performance loops

我试图以这种格式存储我的数据库中的日期和月份名称。我的目标是存储月份,然后计算当月的条目,然后存储计数。这是我的循环,但我无法正确格式化数组。

while ( $row = mysql_fetch_assoc($res) ) {
    if ($row['Date'] != $prev_date) {
        $values=array(
            $row['Date'] => $count,
        );

        $prev_date = $row['Date'];
    }

    $count++;
}
print_f($values);

你可以看到我将永远覆盖我之前的数组,而我实际上并没有在数组中添加条目。我无法弄清楚如何做到这一点。我基本上试图查看每月的参赛人数。

OLD Update:目前正在学习一位评论者提到的MYSQL。我得到它时会更新。

4 个答案:

答案 0 :(得分:2)

您可以在sql中使用group by进行此操作,其中包括:select date, count(*) from table group by date

编辑: 如果您只需按月计算,请使用以下内容:select MONTH(dateField) as NewDate, count(*) FROM table GROUP BY NewDate

答案 1 :(得分:1)

几乎得到了它!

$values=array();
    while ( $row = mysql_fetch_assoc($res) ) {
        if ($row['Date'] != $prev_date) {
            $values[$row['Date']] =  $count;

            $prev_date = $row['Date'];
            $count = 0;
        }

        $count++;

    }

更新:需要一点帮助。

我的输出:

Array ( [9] => [10] => 999 [11] => 986 ) 

999应该存储在9中,986应该存储在10中。

更新:这是我的新代码,如果有人能向我展示更有效的方式,我将不胜感激。

    $sql = "SELECT MONTH(AddDate) AS Date, column_name FROM table ORDER BY AddDate ASC";
    $res = mysql_query($sql) or die(mysql_error());
    $prev_date = null;

$values=array();

    while ( $row = mysql_fetch_assoc($res) ) {
        if ( $row['Date'] != $prev_date) {
            $month = $row['Date'];
            $sql = "SELECT count(MONTH(AddDate)) AS EntryAmount FROM `table` WHERE MONTH(AddDate)=$month ";
            $countResults = mysql_query($sql) or die(mysql_error());
            if( $entryAmount = mysql_fetch_array($countResults) ) {
                $values[$row['Date']] =  $entryAmount['EntryAmount'];
            }
            $prev_date = $row['Date'];
        }
    }

输出:

Array ( [9] => 999 [10] => 986 [11] => 264 ) 

答案 2 :(得分:0)

不确定我明白你要做什么。怎么样?

$values[$row['Date']]++;

答案 3 :(得分:0)

如何循环查询结果:

SELECT COUNT(MONTH(AddDate)) AS EntryAmount, MONTH(AddDate) as MonthValue FROM table GROUP BY MONTH(AddDate)