добавить данные в массив по часовому интервалу

vkolomiets

Новичок
добавить данные в массив по часовому интервалу

Всем привет. тут у меня задачка есть.
Из БД получаем массив часов:
+------------+------------+------------+
| HOUR(time) | date | COUNT(mac) |
+------------+------------+------------+
| 19 | 2008-06-12 | 9 |
| 20 | 2008-06-12 | 11 |
| 14 | 2008-06-13 | 7 |
| 5 | 2008-06-14 | 1 |
| 6 | 2008-06-14 | 8 |
| 16 | 2008-06-14 | 1 |
| 17 | 2008-06-17 | 29 |
| 18 | 2008-06-17 | 47 |
| 21 | 2008-06-17 | 90 |
| 22 | 2008-06-17 | 79 |
| 23 | 2008-06-17 | 33 |
| 0 | 2008-06-18 | 63 |
| 1 | 2008-06-18 | 34 |
| 2 | 2008-06-18 | 51 |
| 3 | 2008-06-18 | 26 |
| 4 | 2008-06-18 | 25 |
| 13 | 2008-06-18 | 12 |
| 15 | 2008-06-18 | 1 |
+------------+------------+------------+

мне нужно построить график по времени ( по часам) при помощи jpgraph, но график получается не учитывает часы по которым нет данных COUNT(mac)(т.е. вообще этих данных нет в БД). т.е. теряется часовой интервал (0-23).
Вопрос. Как добавить к графику часы с нулевыми значениями с помощью php?

например имеем масив

$hours=array(19,20,14, 5, 6 , 16 ,17, 18, 21);

как добавть в него остальные часы, чтобы он выглядел как:
(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23)
и добавить нулевые значения в масив из count(mac)???

Заранее спасибо за помощь!
 

LeFF®

Новичок
а что мешает создать массив 0-23 и в него записать, если существует значение count(mac) и если не существует 0?
 

vkolomiets

Новичок
массив может быть не только по одним суткам (0-23), а так же за несколько дней (0-23,0-23,0-23)
 

zerkms

TDD infected
Команда форума
создать TEMPORARY таблицу, заполненную 0-23, и прибить через LEFT JOIN к текущему запросу
 

vkolomiets

Новичок
c LEFT JOIN не могу разобраться.


как его прикрутить к запросу?

вот сам запрос "SELECT HOUR(time), date, COUNT(*) FROM logs WHERE script='script:eek:k' GROUP BY HOUR(time) ORDER BY date"

как связять с temporary таблицей? :(
 

zerkms

TDD infected
Команда форума
FROM `logs` `l` LEFT JOIN `hours` `h` ON HOUR(`l`.`time`) = `h`.`hour` ...
 

vovanium

Новичок
делаешь массив по датам, потом банальный цикл
PHP:
$dayshours = array();
while ($item = /*достаем строку из mysql*/){
   $dayshours[$item[1]][$item[0]] = $item[2]; // в итоге типа $dayshours['2008-06-12'][19] = 9;
}

foreach($dayshours AS $date => $hours){
    for($hour = 0; $hour < 24; $hour++){
      echo !empty($hours[$hour]) ? "<b>{$hour} = " . str_repeat('*', $hours[$hour]) ."</b><br>" : "{$hour} = <br>";
   }
}
В итоге выведет все часы диапазона и жирным те которые есть в базе и звездочками нарисует график. :)
 
Сверху