PDA

Просмотр полной версии : Статистика посещений за неделю


Renovatio
19.09.2009, 10:24
Как написать статистику посещений за неделю?
Например вот так:
Понедельник: 25
Вторник: 15
Среда: 23
Четверг: 20
Пятница: 5
Суббота: 100
Воскресенье: 120

rohard
19.09.2009, 11:22
Если тебе нужно знать, сколько людей посещают твой сайт по пятницам, к примеру, то так же, как и обычный счетчик посещений. Только запись должна производиться в разные файлы (7 штук, на каждый день недели). Можешь и в БД, только смысла не много.

Если же тебе нужно знать сколько твой сайт посетили в конкретную пятницу (опять же, к примеру), то тут все немного сложнее.

Googleman
19.09.2009, 11:44
Если же тебе нужно знать сколько твой сайт посетили в конкретную пятницу (опять же, к примеру), то тут все немного сложнее.

Если с бд работать, то совсем не намного.

Имелось в виду, что десятком файлов и парой-тройкой строчек тут не обойтись ;)

Пожалуй да )

rohard
19.09.2009, 12:04
Если с бд работать, то совсем не намного.

Имелось в виду, что десятком файлов и парой-тройкой строчек тут не обойтись ;)

rozdo
20.09.2009, 03:31
А не проще использовать статистику крупных сайтов? :dirol: (http://iluzian.comlu.com/) К примеру liveinternet.ru

Весёлый Молочник
20.09.2009, 11:25
Не проще, просто потому, что юзверы СТК сидят без внешки, следовательно счётчик их обрабатывать не будет.

Renovatio
21.09.2009, 11:00
Может напишите мне примерный код?

Regis Filius
22.09.2009, 22:23
Ни разу не писал код статистики посещений за неделю, но думаю, что ничего сложного тут нет. Главное определиться с тем, что можно считать посещением и как долго сохранять статистику. Довольно легко можно будет сделать статистику на каждый день, которая будет считать сколько всего открывали страницу пользователи без учёта с какого IP и каких браузеров заходили. Если делать подсчёт уже с тем, что данные с одного IP не считаются, чуть сложнее.
Наиболее простой вариант: вписать код, который будет обновлять таблицу views, которая содержит в себе всего три столбца: ID, дата и количество просмотров. Каждое открытие страницы увеличивает количество просмотров на один у определённого дня, в дате будет записана дата в днях, месяцах и годах. Код каждый раз проверяет который сейчас день, если такой день уже имеется, то увеличивает количество просмотров, если нет, то создаёт новую строчку, которая датой соответствует той, которая сейчас, и ставит количество просмотров 1. Ну и потом следующее посещения увеличивают счётчик. Топорно, но работать будет.

UPDATE:
Наскоряк написал код, получилось довольно компактно. Как вариант можно добавить ещё один столбец, в котором хранился бы день недели (понедельник, вторник и т.д.), чтобы выводить и его тоже. Если делать проверку по IP, то надо будет создавать ещё одну таблицу, где будут вестись логи посещения или же уместить всё в одной таблице и количество просмотров будет равняться количеству различных IP, которые заходили на сайт за определенный день. С помощью этого же можно прослеживать за тем, кто именно посещает сайт.

Renovatio
23.09.2009, 20:48
UPDATE:
Наскоряк написал код, получилось довольно компактно. Как вариант можно добавить ещё один столбец, в котором хранился бы день недели (понедельник, вторник и т.д.), чтобы выводить и его тоже. Если делать проверку по IP, то надо будет создавать ещё одну таблицу, где будут вестись логи посещения или же уместить всё в одной таблице и количество просмотров будет равняться количеству различных IP, которые заходили на сайт за определенный день. С помощью этого же можно прослеживать за тем, кто именно посещает сайт.

Большое спасибо за советы! Мне очень помог. А где кстати код который ты написал наскоряк?

Regis Filius
23.09.2009, 22:24
Эээ... я его уже удалил. Вот новый код написал только что.

Без проверки по IP, зато с русскими днями недели из-за чего код стал несколько длиннее. Что мне здесь не нравится, так это то, что приходится отправлять целых три запроса в базу данных.
Кто-нибудь может подсказать, как убрать лишний запрос в 55 строке, если возможно?

<html><body>
<?php
// ПОДКЛЮЧАЕМСЯ К БАЗЕ ДАННЫХ
mysql_connect ('localhost', 'user', 'pass');
mysql_select_db ('test');

// ПОЛУЧАЕМ ДАННЫЕ О ПОСЕЩЕНИЯХ ЗА ПОСЛЕДНИЕ СЕМЬ ДНЕЙ
$query = mysql_query ("SELECT * FROM `logs` ORDER BY `date` DESC LIMIT 7");
$row = mysql_fetch_array ($query);

// ЕСЛИ ЕСТЬ ПОСЕЩЕНИЯ, ВЫВОДИМ СТАТИСТИКУ ЦИКЛОМ
if ($row > 0)
{
do
{
$date = $row['date'];
$wday = $row['wday'];
$views = $row['views'];
echo "$date ($wday) - $views <br />";
}
while ($row = mysql_fetch_array ($query));
}
// ЕСЛИ НЕ БЫЛО ПОСЕЩЕНИЙ
else echo "Вы наш первый посетитель! о_О <br />";

// ДОБАВЛЯЕМ НАШЕ ПОСЕЩЕНИЕ ПОСЛЕ ПРОВЕРКИ, ЕСТЬ ЛИ ПОСЕЩЕНИЯ НА ЭТОТ ДЕНЬ
$date = date('Y-m-d');
$wday = date('D');
// РУССКОЕ НАЗВАНИЕ ДЛЯ НЕДЕЛИ
switch ($wday)
{
case Mon:
$wday = 'Понедельник';
break;
case Tue:
$wday = 'Вторник';
break;
case Wed:
$wday = 'Среда';
break;
case Thu:
$wday = 'Четверг';
break;
case Fri:
$wday = 'Пятница';
break;
case Sat:
$wday = 'Суббота';
break;
case Sun:
$wday = 'Воскресение';
break;
}
// ВОТ ЭТОТ ЛИШНИЙ ЗАПРОС
$query = mysql_query ("SELECT * FROM `logs` WHERE `date`='$date'");
$row = mysql_fetch_array ($query);
if ($row > 0) $update = mysql_query ("UPDATE `logs` SET `views`=`views`+1 WHERE `date`='$date'");
else $insert = mysql_query ("INSERT INTO `logs` SET `date`='$date', `wday`='$wday', `views`='1'");
?>
</body></html>

Таблица logs:
CREATE TABLE `logs` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT ,
`date` DATE NOT NULL ,
`wday` VARCHAR( 15 ) NOT NULL ,
`views` MEDIUMINT NOT NULL ,
PRIMARY KEY ( `id` )
);

P.S. Я изобрёл колесо :)

VanDamM
24.09.2009, 18:14
Эээ... я его уже удалил. Вот новый код написал только что.

Без проверки по IP, зато с русскими днями недели из-за чего код стал несколько длиннее. Что мне здесь не нравится, так это то, что приходится отправлять целых три запроса в базу данных.
Кто-нибудь может подсказать, как убрать лишний запрос в 55 строке, если возможно?

<html><body>
<?php
// ПОДКЛЮЧАЕМСЯ К БАЗЕ ДАННЫХ
mysql_connect ('localhost', 'user', 'pass');
mysql_select_db ('test');

// ПОЛУЧАЕМ ДАННЫЕ О ПОСЕЩЕНИЯХ ЗА ПОСЛЕДНИЕ СЕМЬ ДНЕЙ
$query = mysql_query ("SELECT * FROM `logs` ORDER BY `date` DESC LIMIT 7");
$row = mysql_fetch_array ($query);

// ЕСЛИ ЕСТЬ ПОСЕЩЕНИЯ, ВЫВОДИМ СТАТИСТИКУ ЦИКЛОМ
if ($row > 0)
{
do
{
$date = $row['date'];
$wday = $row['wday'];
$views = $row['views'];
echo "$date ($wday) - $views <br />";
}
while ($row = mysql_fetch_array ($query));
}
// ЕСЛИ НЕ БЫЛО ПОСЕЩЕНИЙ
else echo "Вы наш первый посетитель! о_О <br />";

// ДОБАВЛЯЕМ НАШЕ ПОСЕЩЕНИЕ ПОСЛЕ ПРОВЕРКИ, ЕСТЬ ЛИ ПОСЕЩЕНИЯ НА ЭТОТ ДЕНЬ
$date = date('Y-m-d');
$wday = date('D');
// РУССКОЕ НАЗВАНИЕ ДЛЯ НЕДЕЛИ
switch ($wday)
{
case Mon:
$wday = 'Понедельник';
break;
case Tue:
$wday = 'Вторник';
break;
case Wed:
$wday = 'Среда';
break;
case Thu:
$wday = 'Четверг';
break;
case Fri:
$wday = 'Пятница';
break;
case Sat:
$wday = 'Суббота';
break;
case Sun:
$wday = 'Воскресение';
break;
}
// ВОТ ЭТОТ ЛИШНИЙ ЗАПРОС
$query = mysql_query ("SELECT * FROM `logs` WHERE `date`='$date'");
$row = mysql_fetch_array ($query);
if ($row > 0) $update = mysql_query ("UPDATE `logs` SET `views`=`views`+1 WHERE `date`='$date'");
else $insert = mysql_query ("INSERT INTO `logs` SET `date`='$date', `wday`='$wday', `views`='1'");
?>
</body></html>

Таблица logs:
CREATE TABLE `logs` (
`id` MEDIUMINT NOT NULL AUTO_INCREMENT ,
`date` DATE NOT NULL ,
`wday` VARCHAR( 15 ) NOT NULL ,
`views` MEDIUMINT NOT NULL ,
PRIMARY KEY ( `id` )
);

P.S. Я изобрёл колесо :)

http://habrahabr.ru/blogs/algorithm/70413/

Renovatio
24.09.2009, 18:15
Спасибо! Если будет время немножко модернизирую... :)