Как суммировать статистические данные?

387
26 января 2017, 05:08

Я прохожу практику , мне дали задание сделать счетчик статистики (самый простой ) . Я его сделал , теперь попросили сделать так что бы показывали общею сумму "просмотров" за определенный промежуток времени ( в данном случаи за год ).Уже 4 день сижу и ломаю голову над этим , хоть решение наверное легче легкого но хоть убей не могу додуматься . Помогите пожалуйста. Вот структура таблицы Вот код двух главных файлом (на всякий случай)

<?php include '../inc/db.php'; ?> 
<html> 
<head> 
	<meta charset = "utf-8" /> 
<body> 
<style> 
   body { background-color: #F9F2E3; } 
   h2 { 
    background-color: rgb(214,86,43); 
    color: rgba(255,255,255,.9); 
    padding: 10px; 
   }  
   p { color: green; } 
   div { 
    background-color: hsl(60,100%,25%); 
    color: hsla(120,100%,50%,0.1); 
   }  
</style> 
 </head> 
</body> 
</html>  
<h2>Статистика</h2> 
<p><a href="?interval=1">За сегодня</a></p> 
<p><a href="?interval=7">За последнюю неделю</a></p> 
<p><a href="?interval=30">За послединий месяц</a></p> 
<p><a href="?interval=183">За последнюю пол года</a></p> 
<p><a href="?interval=365">За последний год</a></p> 
<table style="border: 1px solid silver;"> 
<tr> 
    <td style="border: 1px solid silver;">Дата</td> 
    <td style="border: 1px solid silver;">Уникальных посетителей</td> 
    <td style="border: 1px solid silver;">Просмотров</td> 
</tr> 
 
<?php 
// Если в массиве GET есть элемент interval (т.е. был клик по одной из ссылок выше) 
if ($_GET['interval']) 
{ 
	$interval = $_GET['interval']; 
     
    // Если в качестве параметра передано не число 
    if (!is_numeric ($interval)) 
    { 
        echo '<p><b>Недопустимый параметр!</b></p>';         
    } 
     
    // Указываем кодировку, в которой будет получена информация из базы  
    @mysqli_query ($db, 'set character_set_results = "utf8"'); 
     
    // Получаем из базы данные, отсортировав их по дате в обратном порядке в количестве interval штук 
	$res = mysqli_query($db, "SELECT * FROM `visits` ORDER BY `date` DESC LIMIT $interval");     
     
    // Формируем вывод строк таблицы в цикле 
	while ($row = mysqli_fetch_assoc($res)) 
    { 
		echo '<tr> 
			     <td style="border: 1px solid silver;">' . $row['date'] . '</td> 
			     <td style="border: 1px solid silver;">' . $row['hosts'] . '</td> 
			     <td style="border: 1px solid silver;">' . $row['views'] . '</td> 
			 </tr>'; 
	}  
} 
?> 
<div>.</div> 
</table>

<?php include 'db.php'; 
 
// Указываем кодировку, в которой будет получена информация из базы  
@mysqli_query ($db, 'set character_set_results = "utf8"'); 
 
// Получаем IP-адрес посетителя и сохраняем текущую дату	 
$visitor_ip = $_SERVER['REMOTE_ADDR']; 
$date = date("Y-m-d"); 
 
// Узнаем, были ли посещения за сегодня    
$res = mysqli_query($db, "SELECT `visit_id` FROM `visits` WHERE `date`='$date'") or die ("Проблема при подключении к БД"); 
 
// Если сегодня еще не было посещений 
if (mysqli_num_rows($res) == 0) 
{ 
    // Очищаем таблицу ips 
    mysqli_query($db, "DELETE FROM `ips`"); 
     
    // Заносим в базу IP-адрес текущего посетителя 
    mysqli_query($db, "INSERT INTO `ips` SET `ip_address`='$visitor_ip'"); 
     
    // Заносим в базу дату посещения и устанавливаем кол-во просмотров и уник. посещений в значение 1 
    $res_count = mysqli_query($db, "INSERT INTO `visits` SET `date`='$date', `hosts`=1,`views`=1"); 
} 
 
// Если посещения сегодня уже были 
else 
{    
    // Проверяем, есть ли уже в базе IP-адрес, с которого происходит обращение 
    $current_ip = mysqli_query($db, "SELECT `ip_id` FROM `ips` WHERE `ip_address`='$visitor_ip'"); 
     
    // Если такой IP-адрес уже сегодня был (т.е. это не уникальный посетитель)  
    if (mysqli_num_rows($current_ip) == 1) 
    { 
        // Добавляем для текущей даты +1 просмотр (хит) 
        mysqli_query($db, "UPDATE `visits` SET `views`=`views`+1 WHERE `date`='$date'"); 
    } 
     
    // Если сегодня такого IP-адреса еще не было (т.е. это уникальный посетитель) 
    else 
    {    
        // Заносим в базу IP-адрес этого посетителя 
        mysqli_query($db, "INSERT INTO `ips` SET `ip_address`='$visitor_ip'"); 
         
        // Добавляем в базу +1 уникального посетителя (хост) и +1 просмотр (хит) 
        mysqli_query($db, "UPDATE `visits` SET `hosts`=`hosts`+1,`views`=`views`+1 WHERE `date`='$date'"); 
    } 
}

Answer 1

Если я правильно понял, Вам нужен запрос суммы всех просмотров за некоторый период (например за год). Это можно сделать так:

$res = mysqli_query($db, "SELECT SUM(`views`) FROM `visits` WHERE `date` >= '2016-01-01' AND `date` <= '2017-01-01'");

Для вывода на страницу:

while ($row = mysqli_fetch_assoc($res)){
    echo $row['views'];
}
READ ALSO