|
|
|
| Решил сделать счетчик, т. к. доступа к логам нет. Сам скрипт предельно прост и стандартен: на страницу лепится рисунок counter.php, который при загрузке скидывает нужные данные в БД (браузер, ip, время захода, реферер, местоположение (страница)).
Вот дамп таблицы (можно ее оптимизировать, создав отдельные таблицы для названий браузеров и названий страниц, это я буду делать позже):
CREATE TABLE `counter` (
`id` int(11) NOT NULL auto_increment,
`time` datetime NOT NULL,
`ip` varchar(15) NOT NULL,
`browser` text NOT NULL,
`page` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;
| То есть, каждая запись сохраняется в отдельной строке.
Теперь вопрос: при выводе разного рода статистики приходится делать в одном скрипте кучу разных запросов вида
<?
$vis_total = mysql_query( "SELECT COUNT(id) FROM `counter`" );
$vis_total = mysql_result( $vis_total, 0, 'COUNT(id)' );
$vis_total_ip = mysql_query( "SELECT `ip` FROM `counter` GROUP BY `ip`" );
$vis_total_ip = mysql_num_rows( $vis_total_ip );
$vis_total_browser_msie = mysql_query( "SELECT COUNT(browser) FROM `counter` WHERE `browser` LIKE '%MSIE%'" );
$vis_total_browser_msie = mysql_result( $vis_total_browser_msie, 0, 'COUNT(browser)' );
$vis_total_browser_opera = mysql_query( "SELECT COUNT(browser) FROM `counter` WHERE `browser` LIKE '%Opera%'" );
$vis_total_browser_opera = mysql_result( $vis_total_browser_opera, 0, 'COUNT(browser)' );
$vis_total_browser_mozilla = mysql_query( "SELECT COUNT(browser) FROM `counter` WHERE `browser` LIKE '%Firefox%'" );
$vis_total_browser_mozilla = mysql_result( $vis_total_browser_mozilla, 0, 'COUNT(browser)' );
$vis_total_browser_other = mysql_query( "SELECT COUNT(browser) FROM `counter` WHERE `browser` NOT LIKE '%Firefox%' AND `browser` NOT LIKE '%MSIE%' AND `browser` NOT LIKE '%Opera%'" );
$vis_total_browser_other = mysql_result( $vis_total_browser_other, 0, 'COUNT(browser)' );
?>
|
И такого рода запросов еще несколько штук, плюс статистику надо делать за текущий день, неделю и месяц. И можно за год :)
Понятное дело, что если в статистику заходит один человек два раза в день, то сервер не нагружается вообще. А если эта статистика нужна многим пользователям? Наверняка ведь можно как-то объединить такого рода запросы? | |
|
|
|
|
|
|
|
для: aexb
(06.02.2008 в 18:28)
| | Объедените последние 4 запроса с помощью GROUP BY `browser`
SELECT 'browser',COUNT(browser) FROM `counter` GROUP BY `browser`
|
насчёт первых двух, непонятно, чего вы добиваетесь | |
|
|
|
|
|
|
|
для: MIchail1982
(06.02.2008 в 18:33)
| | Если объединить последние четыре запроса по вашему примеру, в итоговой таблице получается всего два столбца: один со словом "browser", а другой - с суммами записей по уникальным полям.
В первом запросе считается общее количество полей в таблице, во втором - группировка по ip-адресам. | |
|
|
|
|
|
|
|
для: aexb
(06.02.2008 в 18:41)
| | >Если объединить последние четыре запроса по вашему примеру, в итоговой таблице получается всего два столбца: один со словом "browser", а другой - с суммами записей по уникальным полям.
ну а далее
while($brz = mysql_fetch_assoc($result))
{
echo $brz['browser']," ",$brz['count'],"<br>";
}
PS $brz['count'] амените на имя столбца в выборке
|
| |
|
|
|