Задать вопрос
@Kutuz25

Как вывести дату на диаграмме, если ее нет в базе?

Всем привет. Хочу вывести диаграмму по просмотрам каждой статьи за неделю, код у меня такой:
$date = date('Y-m-d', strtotime('-7 days'));
$sth = $pdo->prepare("SELECT `date` AS stat_day, SUM(`counter`) AS count FROM `visits` WHERE `page_id` = ? AND `date` > ? GROUP BY `date` ORDER BY `stat_day`");
$sth->execute([$page_id,$date]);
$res = $sth->fetchAll(PDO::FETCH_ASSOC);
$list_date = [];
$list_count = [];
foreach ($res as $row) {
	$list_date[] = date('d.m.Y', strtotime($row['stat_day']));
	$list_count[] = $row['count'];
}

Данные в js подставляю в json, получаю такую диаграмму. На ней отсутствует число просмотров за 14.01.24 т.к. записей нет в базе.
65a5934347d7e384989561.png
Как выводить на диаграмме все даты и количество просмотров, если даже вся неделя по 0?
  • Вопрос задан
  • 99 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
@RusaDrako
При формировании данных сначала построй массив дат за период (пустые), а потом заполни его данными (которые есть).

// Получаем массив $res
// Формируем массив дат
$list = [];
$minDate = strtotime('-7 days');
$maxDate = strtotime(date());
for($date = $minDate; $date <= $maxDate; $date += 24*60*60) {
	$list[date('Y-m-d', $date)] = 0;
}
// Заполняем данными
foreach ($res as $row) {
	$list[date('d.m.Y', strtotime($row['stat_day']))] = $row['count'];
}
$list_date[] = array_keys($list);
$list_count[] = array_values($list);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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