我有一个存储管理员登录请求的表。
-- 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个字符进行分组,并查看每个时段的不同用户代理。
答案 0 :(得分:3)
select date(loginTimestamp) as logindate,
group_concat(distinct browser) as useragents
from AdminLogins
group by logindate
答案 1 :(得分:1)
这只是部分答案,并不提供您需要的SQL,但确实提供了您很快就会需要的信息。
用户代理很复杂,并且可能包含很多细节 - 有时你不仅可以识别浏览器,还可以识别操作系统,浏览器版本,有时甚至是随机的垃圾,你可能从不关心.NET的版本他们安装的框架。
如果您只是将完整的用户代理字符串转储到MySQL表中而不事先对其进行任何处理,那么您将无法巧妙地提取人类有意义的信息 - 更不用说可以合理地使用的信息了形成漂亮的图形 - 仅使用SQL从该表开始。
相反,在您感兴趣的时间段内拉出所有用户代理,并使用编程语言而不是SQL进行处理。如果您使用的是PHP,则需要获取最新的browscap.ini
文件,并使用get_browser
函数来解析用户代理。
您可能需要考虑重新调整现有跟踪代码,以便在记录用户代理时调用get_browser
,并记录您关注的所有详细信息(例如浏览器,操作系统,主浏览器版本号,次要浏览器)版本号)在单独的列中。然后,将来有可能只使用SQL提取有用的信息。