2012-05-12 35 views
2

我有一个表,每行包含有关用户加载页面的数据。其中一个字段是该命中的用户代理。我怎样才能通过浏览器对结果进行分组?我可以按普通用户代理:通过浏览器分组用户代理

SELECT useragent, COUNT(useragent) AS c 
FROM hitstable 
GROUP BY useragent 
ORDER BY c DESC 

但我想按浏览器,无论版本或改变其他数据。我希望它能输出一个列表,列出浏览器的普遍程度。

我该怎么做?

回答

0

请参阅php的get_browser()函数以从用户代理字符串中识别它。您需要遍历所有用户代理字符串,计算每个字符串的结果。

0

想到两种方法。

1)添加一个只存储浏览器名称的列。这将使得通过浏览器进行分组变得非常容易,代价是让表格变大。您可以使用Chris建议的get_browser()函数。

2)分别使用REGEXP或LIKE查询(LIKE“%chrome /%”)查询每个浏览器的结果,然后将结果合并在一起。这将不需要任何额外的空间,但它会使您的查询更具问题。

1

您可以在group http user agent sql上找到用于对不同用户代理/版本进行排序的SQL语句(MySQL和SQL Server)。它基于RegExp和来自流行浏览器的开关案例SQL。

1

我发现使用MySQL CASE解析浏览器,操作系统和位体系结构很有帮助。数据($ _SERVER ['HTTP_USER_AGENT'])通过PHP插入到MySQL表中。也许你会发现下面的代码很有用。它还根据UserAgent呈现一些Font Awesome图标。

下面的SELECT由浏览器别名分组。当然,OS和BitArchitecture也可以做到这一点。

SELECT 
    CASE 
     WHEN `UserAgent` LIKE '%Mac%OS%' THEN '<i class="fa fa-apple"></i> Mac OS X' 
     WHEN `UserAgent` LIKE '%iPad%' THEN '<i class="fa fa-apple"></i> iPad' 
     WHEN `UserAgent` LIKE '%iPod%' THEN '<i class="fa fa-apple"></i> iPod' 
     WHEN `UserAgent` LIKE '%iPhone%' THEN '<i class="fa fa-apple"></i> iPhone' 
     WHEN `UserAgent` LIKE '%imac%' THEN '<i class="fa fa-apple"></i> mac' 
     WHEN `UserAgent` LIKE '%android%' THEN '<i class="fa fa-android"></i> android' 
     WHEN `UserAgent` LIKE '%linux%' THEN '<i class="fa fa-linux"></i> linux' 
     WHEN `UserAgent` LIKE '%Nokia%' THEN 'Nokia' 
     WHEN `UserAgent` LIKE '%BlackBerry%' THEN 'BlackBerry' 
     WHEN `UserAgent` LIKE '%win%' THEN 
      CASE 
       WHEN `UserAgent` LIKE '%NT 6.2%' THEN '<i class="fa fa-windows"></i> Windows 8' 
       WHEN `UserAgent` LIKE '%NT 6.3%' THEN '<i class="fa fa-windows"></i> Windows 8.1' 
       WHEN `UserAgent` LIKE '%NT 6.1%' THEN '<i class="fa fa-windows"></i> Windows 7' 
       WHEN `UserAgent` LIKE '%NT 6.0%' THEN '<i class="fa fa-windows"></i> Windows Vista' 
       WHEN `UserAgent` LIKE '%NT 5.1%' THEN '<i class="fa fa-windows"></i> Windows XP' 
       WHEN `UserAgent` LIKE '%NT 5.0%' THEN '<i class="fa fa-windows"></i> Windows 2000' 
       ELSE '<i class="fa fa-windows"></i> Windows' 
      END  
     WHEN `UserAgent` LIKE '%FreeBSD%' THEN 'FreeBSD' 
     WHEN `UserAgent` LIKE '%OpenBSD%' THEN 'OpenBSD' 
     WHEN `UserAgent` LIKE '%NetBSD%' THEN 'NetBSD' 
     WHEN `UserAgent` LIKE '%OpenSolaris%' THEN 'OpenSolaris' 
     WHEN `UserAgent` LIKE '%SunOS%' THEN 'SunOS' 
     WHEN `UserAgent` LIKE '%OS/2%' THEN 'OS/2' 
     WHEN `UserAgent` LIKE '%BeOS%' THEN 'BeOS' 
     ELSE 'Unknown' 
    END AS `OS`, 
    CASE 
     WHEN `UserAgent` LIKE '%edge%'THEN '<i class="fa fa-edge"></i> Edge' 
     WHEN `UserAgent` LIKE '%MSIE%' THEN '<i class="fa fa-internet-explorer"></i> Internet Explorer' 
     WHEN `UserAgent` LIKE '%Firefox%' THEN '<i class="fa fa-firefox"></i> Mozilla Firefox' 
     WHEN `UserAgent` LIKE '%Chrome%' THEN '<i class="fa fa-chrome"></i> Google Chrome' 
     WHEN `UserAgent` LIKE '%Safari%' THEN '<i class="fa fa-safari"></i> Apple Safari' 
     WHEN `UserAgent` LIKE '%Opera%' THEN '<i class="fa fa-opera"></i> Opera' 
     WHEN `UserAgent` LIKE '%Outlook%' THEN 'Outlook' 
     ELSE 'Unknown' 
    END AS `Browser`, 
    CASE 
     WHEN `UserAgent` LIKE '%WOW64%' THEN '64 bit' 
     WHEN `UserAgent` LIKE '%x64%' THEN '64 bit' 
     ELSE '32 bit' 
    END AS `BitArchitecture` 
FROM `Logs` 
GROUP BY `Browser`;