Автовивификация в PHP - PullRequest
2 голосов
/ 29 ноября 2010

если у меня есть этот SQL-запрос:

select substring(id for 2) as key, 
yw, count(*)
from pref_money group by yw, key

возвращаемое количество пользователей в неделю и на ключ:

 key |   yw    | count
-----+---------+-------
 VK  | 2010-45 |   144
 VK  | 2010-44 |    79
 MR  | 2010-46 |    72
 OK  | 2010-48 |   415
 FB  | 2010-45 |    11
 FB  | 2010-44 |     8
 MR  | 2010-47 |    55
 VK  | 2010-47 |   136
 DE  | 2010-48 |    35
 VK  | 2010-46 |   124
 MR  | 2010-44 |    40
 MR  | 2010-45 |    58
 FB  | 2010-47 |    13
 FB  | 2010-46 |    13
 OK  | 2010-47 |  1834
 MR  | 2010-48 |    13
 OK  | 2010-46 |  1787
 DE  | 2010-44 |    83
 DE  | 2010-45 |   128
 FB  | 2010-48 |     4
 OK  | 2010-44 |  1099
 OK  | 2010-45 |  1684
 DE  | 2010-46 |   118
 VK  | 2010-48 |    29
 DE  | 2010-47 |   148

Тогда как мне подсчитать этих пользователей?Я пытаюсь:

    $sth = $db->prepare('select substring(id for 2) as key, yw, count(*)
                         from pref_money group by yw, key');
    $sth->execute();
    while ($row = $sth->fetch(PDO::FETCH_ASSOC))
            ++$users[$row['yw']][$row['key']];
    print_r($users);

, но получаю многочисленные ошибки.

Я пытаюсь получить данные для диаграммы с накоплением баров .Ось X показывает номера недель, а ось Y - количество пользователей, сгруппированных по строкам клавиш.

Спасибо!Alex

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

Вы пытаетесь суммировать столбец count или просто возвращаете количество строк? Если последнее, у php есть метод для этого. если первое, вам нужно сделать его $users[$row['yw']][$row['key'] += $row['count'] вместо этого (при условии, что массив уже создан).

0 голосов
/ 29 ноября 2010
$sth = $db->prepare('select substring(id for 2) as key, yw, count(*)
                         from pref_money group by yw, key');
    $sth->execute();
    $users=array();  //  register $users as an array.
    while ($row = $sth->fetch(PDO::FETCH_ASSOC))
            if(!isset($users[$row['yw']])){// see if $users['whatever_key'] has already been set
               $users[$row['yw']]=0;//if not, initialize it as a default starting value of 0
             }
            $users[$row['yw']]+=$row['key'];//now we won't get any nasty notices here about undeclared variables or keys..
    print_r($users);
...