0

我正在尝试选择本年度每月访问我网站的访问者。

对于每个不同的 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 小时内唯一。所以不是整个月。

可以只使用 date >= NOW() - INTERVAL 1 MONTH),但这将在 2009 年 1 月之后跳转到 2008 年 12 月。所以它应该只显示给定年份的月份。

一个月内是否有相同的功能(每周计算访客人数,所以第一周到第四周有 4 行)?

谢谢!

4

1 回答 1

1

您想获得每个网站每月的唯一身份访问者数量吗?像这样的东西应该工作:

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

首先它在子查询中按天分组,然后在周围查询中再次按月分组。

我不完全确定你的意图是什么,但你应该能够根据你的目的调整这种技术。

(编辑:添加年份组件进行查询)

于 2009-08-22T09:45:33.217 回答