MySQL Получить строки между месяцами - PullRequest
0 голосов
/ 22 августа 2009

Я пытаюсь выбрать посетителей моего сайта в месяц за текущий год.

Для каждой отдельной комбинации IP / user_agent будет добавляться строка в минуту. Для отслеживания хитов и уникальных посетителей.

Моя схема выглядит так:

CREATE TABLE `stats` (
    `id` int(11) unsigned NOT NULL auto_increment,
    `domain` varchar(40) NOT NULL,
    `ip` varchar(20) NOT NULL,
    `user_agent` varchar(255) NOT NULL,
    `domain_id` int(11) NOT NULL,
    `date` timestamp NOT NULL default CURRENT_TIMESTAMP,
    `referrer` varchar(400) default NULL,
    PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

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

Но я бы хотел сделать уникальных посетителей уникальными только на 24 часа. Так что не на весь месяц.

Можно было бы просто использовать дату> = СЕЙЧАС () - ИНТЕРВАЛ 1 МЕСЯЦ), но эта цифра переместится на декабрь 2008 года после января 2009 года. Таким образом, она должна показывать только месяцы данного года.

Есть ли функция, позволяющая делать то же самое в течение месяца (подсчитывать посетителей в неделю, так что 4 строки с первой до четвертой недели)?

Спасибо!

1 Ответ

1 голос
/ 22 августа 2009

Вы хотите получить число уникальных посетителей для каждого сайта в месяц? Примерно так должно работать:

SELECT COUNT(*), domain_id, m, y FROM
(
    SELECT ip, user_agent, COUNT(ID) AS hits, domain_id,
        DAY(date) as d, MONTH(date) as m, YEAR(date) as y
    FROM `stats`
    GROUP BY domain_id, ip, d, m, y
) AS tb
GROUP BY tb.m, tb.y

Сначала он группируется по дням в подзапросе, затем снова группируется по месяцам в окружающем запросе.

Я не совсем уверен, каково было ваше намерение, но вы должны быть в состоянии адаптировать эту технику для своих целей.

(редактировать: добавлен компонент года к запросу)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...