2012-05-12 65 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`;