1

我有一个存储管理员登录请求的表。

-- desc AdminLogins

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | int(10)      | NO   | PRI | NULL    | auto_increment | 
| adminID        | mediumint(9) | YES  | MUL | NULL    |                | 
| loginTimestamp | datetime     | YES  |     | NULL    |                | 
| browser        | varchar(255) | YES  |     | NULL    |                | 
+----------------+--------------+------+-----+---------+----------------+

浏览器字段包含用户代理,我想生成一些图表,显示过去 6 个月中每个用户代理的受欢迎程度,但我的查询卡住了。

到目前为止我有

select distinct browser, left(loginTimestamp, 7) from AdminLogins group by left(loginTimestamp, 7);

但它并没有返回我所追求的。

理想情况下,我会按时间字符串的前 7 个字符进行分组,并查看每个时期的不同用户代理。

4

2 回答 2

3
select date(loginTimestamp) as logindate,
       group_concat(distinct browser) as useragents
from AdminLogins 
group by logindate
于 2013-10-10T16:09:14.380 回答
1

这只是部分答案,并没有提供您需要的 SQL,但确实提供了您很快就会需要的信息。

用户代理很复杂,可能包含很多细节——有时您不仅可以识别浏览器,还可以识别操作系统、浏览器版本,有时甚至是您可能永远不会关心的随机废话,例如他们拥有的 .NET 框架版本安装。

如果您只是将完整的用户代理字符串转储到 MySQL 表中而不事先对其进行任何类型的处理,那么您将无法合理地提取对人类有意义的信息——更不用说可以合理用于形成漂亮图形的信息了- 从该表中单独使用 SQL。

相反,在您感兴趣的时间段内提取所有用户代理,并使用编程语言而不是 SQL 进行处理。如果您使用的是 PHP,则需要获取最新browscap.ini文件并使用该get_browser函数来解析用户代理。

您可能需要考虑重组现有的跟踪代码,以便get_browser在记录用户代理时调用它们,并在单独的列中记录您关心的所有详细信息(例如浏览器、操作系统、主要浏览器版本号、次要浏览器版本号)。然后,将来可以仅使用 SQL 来提取有用的信息。

于 2013-10-10T16:28:13.667 回答