Новичок
![](./im/images/pips1.gif)
Покинул форум
Сообщений всего: 52
Дата рег-ции: Янв. 2012
Откуда: Омск, Россия
Помог: 0 раз(а)
![](./templates/InvisionExBB/im/spacer.gif)
|
Здравствуйте
Сайтом пользуются N человек ( 10<N<500 )
Каждый из них может создать по 1-100 потоков для приема трафика
Нужно отслеживать статистику по этим потокам по след.пунктам:
-хиты
-просмотры
-уникальный клики по ссылке http://site[dot]ru/go/123
-все клики по этой ссылке
-источники трафика
С первыми 4-мя проблем не возникло. Создал 2 таблицы для этого:
CODE ( SQL):
скопировать код в буфер обмена
-- -- Структура таблицы `ips` -- CREATE TABLE IF NOT EXISTS `ips` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_flow` int(11) NOT NULL, `type` int(1) NOT NULL, `ip` int(11) UNSIGNED NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Структура таблицы `stats` -- CREATE TABLE IF NOT EXISTS `stats` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_flow` int(11) NOT NULL, `date` date NOT NULL, `views` int(11) NOT NULL, `hits` int(11) NOT NULL, `a_clicks` int(11) NOT NULL, `u_clicks` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Исходник счетчика:
PHP:
скопировать код в буфер обмена
//Статистика $id_flow = $GLOBALS['id_flow']; $id_go = $GLOBALS['id_go']; /* В БД поле `type` обозначает тип статистики: 0 - просмотры/хиты 1 - клики */ //Если это переход на целевую страницу if($id_go){ //Запрашиваем статистику за сегодняшнее число для данного потока $s_res = xsql("SELECT `id` FROM `stats` WHERE `date`='". $date ."' AND `id_flow`=". $id_flow); //Если данных нет, то это первый посетитель за сегодня. Чистим вчерашние Ip и создаем запись для сегодняшнего дня xsql("DELETE FROM `ips` WHERE `id_flow`=". $id_flow); xsql("INSERT INTO `stats` (`id_flow`, `date`, `views`, `hits`, `a_clicks`, `u_clicks`) VALUES (". $id_flow .", '". $date ."', 1, 1, 1, 1)"); xsql("INSERT INTO `ips` (`id_flow`, `type`, `ip`) VALUES (". $id_flow .", 1, ". $ip .")"); }else{ //Если уже есть ячейка для сегодняшнего дня, обновляем ее //Если это уникальный клик $sip_res = xsql("SELECT `id` FROM `ips` WHERE `ip`=". $ip ." AND `id_flow`=". $id_flow ." AND `type`=1"); //Прибавляем +1 к уникальным и не уникальным кликам xsql("UPDATE `stats` SET `a_clicks`=`a_clicks`+1, `u_clicks`=`u_clicks`+1 WHERE `id`=". $s_row['id']); //Заносим ip в базу данных xsql("INSERT INTO `ips` (`id_flow`, `type`, `ip`) VALUES (". $id_flow .", 1, ". $ip .")"); }else{//Если это не уникальный клик //Прибаляем +1 к не уникальным кликам xsql("UPDATE `stats` SET `a_clicks`=`a_clicks`+1 WHERE `id`=". $s_row['id']); } } }else{ //Если просмотр страницы приема трафика //Запрашиваем статистику за сегодняшнее число для данного потока $s_res = xsql("SELECT `id` FROM `stats` WHERE `date`='". $date ."' AND `id_flow`=". $id_flow); //Если данных нет, то это первый посетитель за сегодня. Чистим вчерашние Ip и создаем запись для сегодняшнего дня xsql("DELETE FROM `ips` WHERE `id_flow`=". $id_flow); xsql("INSERT INTO `stats` (`id_flow`, `date`, `views`, `hits`, `a_clicks`, `u_clicks`) VALUES (". $id_flow .", '". $date ."', 1, 1, 0, 0)"); xsql("INSERT INTO `ips` (`id_flow`, `type`, `ip`) VALUES (". $id_flow .", 0, ". $ip .")"); }else{ //Если уже есть ячейка для сегодняшнего дня, обновляем ее //Если Это уникальный посетитель $sip_res = xsql("SELECT `id` FROM `ips` WHERE `ip`=". $ip ." AND `id_flow`=". $id_flow ." AND `type`=0"); //Прибавляем +1 к просмотру и хиту xsql("UPDATE `stats` SET `views`=`views`+1, `hits`=`hits`+1 WHERE `id`=". $s_row['id']); //Заносим ip в базу данных xsql("INSERT INTO `ips` (`id_flow`, `type`, `ip`) VALUES (". $id_flow .", 0, ". $ip .")"); }else{//Если это не уникальный посетитель //Прибаляем +1 к просмотрам xsql("UPDATE `stats` SET `views`=`views`+1 WHERE `id`=". $s_row['id']); } } }
Этот код инклудится в скрипт отдачи страниц для приема трафика (Его содержимое не важно. За исключением 2-х моментов: $id_flow - поток трафика, который создает юзер, $id_go используется для того, чтобы отличить переход на целевую страницу от просмотра одностраничника)
Вот так собирается стата по просмотрам и кликам. Ее можно сортировать по дате (Например, просмотреть статистику с 1 по 20 числа)
Теперь вопрос. Как лучше прикрутить сюда сортировку по сайтам-источникам? Статистику по ним нужно будет сортировать по дням (Посмотреть, сколько с источника было уникальных посетителей, сколько кликов по ссылке за определенный срок). То есть, должны собираться первые 4 параметра!
Была идея создать таблицы: хиты, просмотры, уник.клики, все клики. А при просмотре статистики запрашивать количество записей. Но думаю, что это плохой вариант, и должен быть другой способ. Не будут ведь так хранить данные какие-нибудь гиганты статистик, как я.метрика, или партнерские программы, например, CPA-пп
В общем, как нужно сконструировать таблицы в бд для моих целей? Заранее спасибо(Отредактировано автором: 18 Октября, 2013 - 18:43:18)
|