🔒 Доступ к отчету


setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die('Database connection failed: ' . $e->getMessage()); } // Обработка параметров периода $start_date = $_GET['start_date'] ?? date('Y-m-01'); $end_date = $_GET['end_date'] ?? date('Y-m-d'); $adv_id = $_GET['adv_id'] ?? null; $space_id = $_GET['space_id'] ?? null; // Валидация дат if (!strtotime($start_date) || !strtotime($end_date)) { $start_date = date('Y-m-01'); $end_date = date('Y-m-d'); } // Получение статистики - ТОЛЬКО баннеры с показами за период function getAdvStats($pdo, $start_date, $end_date, $adv_id = null, $space_id = null) { $sql = " SELECT ai.item_id, ai.itemname, ai.erid, ai.adv_link, ai.space_id, ai.adv_file, ai.desktop, ai.phone, ai.tablet, ai.android, ai.adv_active, COUNT(av.view_id) as views_count, COUNT(DISTINCT av.ip_address) as unique_views, MIN(av.viewed_at) as first_view, MAX(av.viewed_at) as last_view FROM adv_views av INNER JOIN adv_items2 ai ON av.adv_id = ai.item_id WHERE av.viewed_at BETWEEN :start_date AND DATE_ADD(:end_date, INTERVAL 1 DAY) "; $params = [ 'start_date' => $start_date, 'end_date' => $end_date ]; // Фильтр по ID баннера if ($adv_id) { $sql .= " AND ai.item_id = :adv_id"; $params['adv_id'] = $adv_id; } // Фильтр по space_id if ($space_id) { $sql .= " AND ai.space_id = :space_id"; $params['space_id'] = $space_id; } $sql .= " GROUP BY ai.item_id, ai.itemname, ai.erid HAVING views_count > 0 ORDER BY views_count DESC, ai.itemname ASC"; $stmt = $pdo->prepare($sql); $stmt->execute($params); return $stmt->fetchAll(PDO::FETCH_ASSOC); } // Получение списка баннеров для фильтра - ТОЛЬКО те, у которых есть показы за период function getAdvList($pdo, $start_date, $end_date) { $sql = " SELECT DISTINCT ai.item_id, ai.itemname, ai.erid, ai.space_id FROM adv_views av INNER JOIN adv_items2 ai ON av.adv_id = ai.item_id WHERE av.viewed_at BETWEEN :start_date AND DATE_ADD(:end_date, INTERVAL 1 DAY) ORDER BY ai.itemname "; $stmt = $pdo->prepare($sql); $stmt->execute([ 'start_date' => $start_date, 'end_date' => $end_date ]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } // Получение списка space_id для фильтра - ТОЛЬКО те, у которых есть показы за период function getSpaceList($pdo, $start_date, $end_date) { $sql = " SELECT DISTINCT ai.space_id FROM adv_views av INNER JOIN adv_items2 ai ON av.adv_id = ai.item_id WHERE av.viewed_at BETWEEN :start_date AND DATE_ADD(:end_date, INTERVAL 1 DAY) ORDER BY ai.space_id "; $stmt = $pdo->prepare($sql); $stmt->execute([ 'start_date' => $start_date, 'end_date' => $end_date ]); return $stmt->fetchAll(PDO::FETCH_ASSOC); } $stats = getAdvStats($pdo, $start_date, $end_date, $adv_id, $space_id); $adv_list = getAdvList($pdo, $start_date, $end_date); $space_list = getSpaceList($pdo, $start_date, $end_date); // Общая статистика $total_views = array_sum(array_column($stats, 'views_count')); $total_unique = array_sum(array_column($stats, 'unique_views')); $total_banners = count($stats); // Топ баннеры $top_banners = array_slice($stats, 0, 5); ?> Отчет по показам баннеров

📊 Отчет по показам баннеров

Баннеров с показами
Всего показов
Уникальные показы
0 ? number_format($total_views / $total_banners, 1) : 0 ?>
Среднее на баннер

🏆 Топ-5 баннеров по показам

$banner): ?>
# ID - () показов
0 ? ($row['unique_views'] / $row['views_count'] * 100) : 0; ?>
ID Название ERID Ссылка ID пространства Устройства Статус Показы Уникальные Первый показ Последний показ CTR
🖥️ 📱 📟 🤖 %

📭 Нет данных за выбранный период

Попробуйте изменить параметры фильтрации