Добавление в цикл в PHP без перезаписи - PullRequest
0 голосов
/ 11 ноября 2009

Я пытаюсь сохранить даты и название месяца из моей базы данных в этом формате. Я собираюсь сохранить месяц, а затем подсчитать записи в этом месяце и затем сохранить счет. Это мой цикл, но у меня проблемы с форматированием массива.

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

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

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

Вы видите, что я всегда перезаписываю свой предыдущий массив, и я не добавляю записи в массив. Я не мог понять, как это сделать. Я в основном пытаюсь увидеть количество записей в месяц.

Старое обновление: в настоящее время изучает MYSQL, о котором упоминал один комментатор. Я обновлю, когда получу.

Ответы [ 4 ]

2 голосов
/ 11 ноября 2009

Вы можете сделать это, используя group by в sql, например: select date, count(*) from table group by date

Edit: Если вам нужно рассчитывать только по месяцам, используйте примерно так: select MONTH(dateField) as NewDate, count(*) FROM table GROUP BY NewDate

1 голос
/ 11 ноября 2009

Я почти понял!

$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 ) 
0 голосов
/ 11 ноября 2009

Как насчет зацикливания результата запроса примерно так:

SELECT COUNT(MONTH(AddDate)) AS EntryAmount, MONTH(AddDate) as MonthValue FROM table GROUP BY MONTH(AddDate)
0 голосов
/ 11 ноября 2009

Не уверен, что понимаю, что вы пытаетесь сделать. Как насчет этого?

$values[$row['Date']]++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...