SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.05.2010 15:57:04

jorik
Участник
Зарегистрирован: 20.09.2009
Сообщений: 9

Статистика одним запросом

Добрый день, такая задача.

Есть две таблицы
1.    bn_ banner_load: (количество загрузок баннера)


CREATE TABLE `bn_ banner_load` (
  `id_banner` int(5) NOT NULL,
  `page_action` text,
  `load_time` datetime NOT NULL,
  KEY `load_time` (`load_time`),
  KEY `id_banner` (`id_banner`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 

2.    bn_banner_stat (количество переходов по баннеру)

CREATE TABLE `bn_banner_stat` (
  `id_banner` int(5) NOT NULL,
  `page_action` varchar(300) NOT NULL,
  `time_action` datetime default NULL,
  KEY `time_action` (`time_action`),
  KEY `id_banner` (`id_banner`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 

Хотелось бы составить запрос который бы выбирал из этих таблиц
Количество загрузок , количество переходов по данной страничке за определённый промежуток времени

Например делаю так:

SELECT COUNT(id_banner) as count, `page_action` FROM `bn_regh_banner_load`
WHERE DAY(`load_time`) = 31 AND MONTH(load_time)=05 AND YEAR(load_time)=2010 AND `id_banner` = 1
GROUP BY `page_action`
 

И

SELECT COUNT(id_banner) as count, `page_action` FROM `bn_regh_banner_stat`
WHERE DAY(`time_action`) = 31 AND MONTH(`time_action`)=05 AND YEAR(`time_action`)=2010 AND `id_banner` = 1
GROUP BY `page_action`
 

Работают нормально…

Но проблема в том что нужно сделать выборку одним запросом и что бы выборка шла только по тем страничкам по которым был сделан переход( bn_banner_stat).  Т.к за день баннер может быть загружен  на 1000 странницах, а кликнули по баннеру только на 10 .

И в конечном итоге получить

id_banner   count_load  count_click      page_action
       1         |       500    |     2          |     http://site/my_page.html

Неактивен

 

#2 31.05.2010 19:55:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Статистика одним запросом

Тогда только подзапросом (WHERE id_banner IN (…)): объединение выдаст произведение
строк и счетчики собьются.

Неактивен

 

#3 01.06.2010 09:48:11

jorik
Участник
Зарегистрирован: 20.09.2009
Сообщений: 9

Re: Статистика одним запросом

не могу довести вашу мысль до конца, можно пример привести ?

Неактивен

 

#4 04.06.2010 02:11:08

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Статистика одним запросом

SELECT COUNT(*), … FROM bn_banner_load WHERE id_banner IN (SELECT id_banner FROM id_banner_stat WHERE тут все условия и ограничения) GROUP BY …

Просто дополнительное условие на то, что строки есть в _stat (ну и во внешнем запросе
тех же условий WHERE нету, т.к. если баннер кликнули, то уж показали точно).

Неактивен

 

#5 04.06.2010 09:49:12

jorik
Участник
Зарегистрирован: 20.09.2009
Сообщений: 9

Re: Статистика одним запросом

Спасибо большое !

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson