Проблема в выводом статистики баннеров

Кинотавр

Новичок
Проблема в выводом статистики баннеров

Всех приветствую.

У меня возникла следующая проблема. Пишу систему сбора статистики баннеров. Собираются показы и переходы. В таблицу banner_stats при каждом показе или переходе вставляется новая запись.

Поля таблицы:
id (INT) - Идентификатор записи
banner (INT) - Идентификатор баннера
hit (INT) = 1 - Очередной показ
click (INT) =1 - Очередной переход
date (TIMESTAMP) - момент совершения показа или перехода

То есть, при очередном показе баннера происходит добавление в таблицу записи с hit=1, а при клике - click=1.

Далее в админке мне нужно все это отображать в виде графиков. И вот здесь подкрался... гм, в общем обозначились проблемы. ;-)

Пытаюсь делать такую выборку.
$result = mysql_query(" SELECT YEAR(date), MONTH(date), SUM(hit), SUM(click) FROM banner_stats WHERE banner='$id' GROUP BY YEAR(date), MONTH(date) ORDER BY YEAR(date) DESC, MONTH(date) DESC ", $cid);

Здесь должен выводиться список суммарных значений показов и переходов конкретного баннера за каждый месяц, отсортированный по убыванию даты.

У меня выводится список суммарных значений показов и переходов по месяцам, отсортированных по убыванию даты - НО ВСЕХ БАННЕРОВ СРАЗУ!

Насколько я понял в ходе ковыряния документации и кода, некорректен эпизод "GROUP BY YEAR(date), MONTH(date)". Вроде бы, в операторе GROUP BY нельзя отработать функции YEAR и MONTH над полем в формате TIMESTAMP.

Прав ли я в своих выводах?
И, если да, то каким же все-таки образом в данном случае можно получить список суммарных значений показов и переходов конкретного баннера за каждый месяц, отсортированный по убыванию даты?

Прошу помочь.
Спасибо.
 

baev

‹°°¬•
Команда форума
Я особо не вдумывался, но, по-моему, группировку надо делать по идентификатору баннера, а год/месяц должны быть в WHERE.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
baev
Ну у него-же может баннер крутиться > 1 мес.

GROUP BY
по tiemstamp-у любое из действий.
а. LEFT
б. SUBSTRING
с. DATE_FORMAT
для усечения к виду YYYYMM.
Правда тогда будет usnig temporary.
 

Кинотавр

Новичок
Автор оригинала: baev
Я особо не вдумывался, но, по-моему, группировку надо делать по идентификатору баннера, а год/месяц должны быть в WHERE.
Мне надо получить список количества показов и переходов по месяцам в обратном хронологическом порядке. Если группировку делать по идентификатору баннера, тогда мы получим просто общее суммарное число всех показов и переходов за все время. А если год и месяц в WHERE, тогда получим не список, а только одно значение за определенный месяц.

-~{}~ 16.03.08 12:06:

Автор оригинала: Mr_Max
baev
Ну у него-же может баннер крутиться > 1 мес.

GROUP BY
по tiemstamp-у любое из действий.
а. LEFT
б. SUBSTRING
с. DATE_FORMAT
для усечения к виду YYYYMM.
Правда тогда будет usnig temporary.
Извините, но я ничего не понял из того, что вы написали. Можно более подробно?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Кинотавр
Более подробно про

а. LEFT
б. SUBSTRING
с. DATE_FORMAT
для усечения к виду YYYYMM.

ты можешь с легкостью прочитать в мануале по MySQL
 

Кинотавр

Новичок
Автор оригинала: Mr_Max
Кинотавр
Более подробно про




ты можешь с легкостью прочитать в мануале по MySQL
Более подробно я просил вас уточнить, что вы имели в виду в контексте моего вопроса.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
GROUP BY
по tiemstamp-у любое из действий.
-~{}~ 16.03.08 17:44:

GROUP BY LEFT(.............)
GROUP BY SUBSTRING(.............)
GROUP BY DATE_FORMAT(.............)

-~{}~ 16.03.08 17:47:

Что именно тебе не понятно в моем ответе?
Какие мысли возникли?
Что пробовал? Как пробовал?
 
Сверху