У меня есть результат sql как:
|date |hour |count |
|2014-03-03 |20 |10 |
|2014-03-03 |18 |9 |
Я хочу отображать счет за 24 часа, но когда счет равен 0, он ничего не отображает.
Вывод, который я хотел бы увидеть:
2014-03-03 | 00:00 | 0
2014-03-03 | 01:00 | 0
2014-03-03 | 02:00 | 9
.
.
.
2014-03-03 | 23:00 |23
Ниже приведен код PHP, который генерирует таблицу, которая отображает почасовой подсчет:
while ($row = mysql_fetch_row($hourlycalls)) {
$hourly = '0';
foreach($hourlycalls as $val) {
if($row[1] == $val['hour']) {
$hourly = $val['count'];
break;
}
}
$result .="<tr><td align=center>".$row[0]."</td>
<td align=center>".$row[1]."</td>
<td align=center>".$row[2]."</td></tr>";
}
Я пытался включить счетчик, но просто не могу заставить его работать.
Есть идеи / предложения?
Поместите все ваши результаты в массив, индекс которого равен часу:
$results = array();
while ($row = mysql_fetch_row($hourlycalls)) {
$results[$row[1]] = $row;
}
Затем используйте почасовой цикл для отображения значений из запроса или значения по умолчанию для часов, которые не были возвращены:
for ($hour = 0; $hour < 24; $hour++) {
if (isset($results[$hour])) {
$row = $results[$hour];
} else {
$row = array($date, $hour, 0);
}
$row[1] = sprintf("%02d:00", $row[1]);
$result .= "<tr><td align=center>".$row[0]."</td>
<td align=center>".$row[1]."</td>
<td align=center>".$row[2]."</td></tr>";
}
Кстати, я рекомендую вам выйти из привычки использования mysql_fetch_row
и использовать mysql_fetch_assoc
вместо. Доступ к возвращаемым значениям по имени столбца делает код намного более читабельным.
Других решений пока нет …