@jazzman7

Как оптимизировать код?

Доброго времени суток. Была задача сделать график и отображать прямой данные из базы за 24 часа. Задачу реализовал, криво, да работало, перешёл сегодня с mysql 5 на mysql 8, страница начала падать, после этого перешёл естественно обратно, но заметил как страница быстро грузится без этого кода даже в единичном варианте, а он у меня к тому же 6 раз повторяется в разных вариациях, в общем в любом случае надо оптимизировать, попытался, что-то сделать, но ничего не вышло. В общем буду благодарен если кто-нибудь подскажет как это "чудо" оптимизировать
for($hour = 0; $hour< 24; $hour++){ 
$start_time = mktime($hour, 0, 0, date("m"), date("d"), date("Y")); 
$finish_time = mktime($hour+1, 0, 0, date("m"), date("d"), date("Y")); 


$host = $pdo->prepare("SELECT * FROM hosts WHERE time BETWEEN ? AND ? AND id_sait = ?");
$host->execute(array($start_time,$finish_time,$id));
$host = $host->rowCount();
;

if(strlen($hour) == 1) $hour = '0'.$hour; 
if(strlen($hour + 1) == 1) $f = '0'.($hour + 1); 
else $f = $f + 1; 
if ($hour<23){ $aa=',';} else {$aa='';}
echo ($host).$aa."";
}
  • Вопрос задан
  • 110 просмотров
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
1. учить SQL и вместо этого циклического ужаса сделать один запрос
SELECT hour(time) hour, count(*) count FROM hosts WHERE id_sait = ? 
AND time BETWEEN unix_timestamp(curdate()) and unix_timestamp()
GROUP BY hour(time);

2. комбинированный индекс на id_sait, time
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы