Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Объединение множества запросов (если возможно)
 
 автор: aexb   (06.02.2008 в 18:28)   письмо автору
 
 

Решил сделать счетчик, т. к. доступа к логам нет. Сам скрипт предельно прост и стандартен: на страницу лепится рисунок 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_total0'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_msie0'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_opera0'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_mozilla0'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_other0'COUNT(browser)' );
?>


И такого рода запросов еще несколько штук, плюс статистику надо делать за текущий день, неделю и месяц. И можно за год :)

Понятное дело, что если в статистику заходит один человек два раза в день, то сервер не нагружается вообще. А если эта статистика нужна многим пользователям? Наверняка ведь можно как-то объединить такого рода запросы?

   
 
 автор: MIchail1982   (06.02.2008 в 18:33)   письмо автору
 
   для: aexb   (06.02.2008 в 18:28)
 

Объедените последние 4 запроса с помощью GROUP BY `browser`
SELECT 'browser',COUNT(browser) FROM `counter` GROUP BY `browser`


насчёт первых двух, непонятно, чего вы добиваетесь

   
 
 автор: aexb   (06.02.2008 в 18:41)   письмо автору
 
   для: MIchail1982   (06.02.2008 в 18:33)
 

Если объединить последние четыре запроса по вашему примеру, в итоговой таблице получается всего два столбца: один со словом "browser", а другой - с суммами записей по уникальным полям.

В первом запросе считается общее количество полей в таблице, во втором - группировка по ip-адресам.

   
 
 автор: MIchail1982   (07.02.2008 в 10:29)   письмо автору
 
   для: aexb   (06.02.2008 в 18:41)
 

>Если объединить последние четыре запроса по вашему примеру, в итоговой таблице получается всего два столбца: один со словом "browser", а другой - с суммами записей по уникальным полям.

ну а далее

while($brz = mysql_fetch_assoc($result))
{
echo $brz['browser']," ",$brz['count'],"<br>";
}
PS  $brz['count'] амените на имя столбца в выборке

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования