我有一個表,每行包含有關用戶加載頁面的數據。其中一個字段是該命中的用戶代理。我怎樣才能通過瀏覽器對結果進行分組?我可以按普通用戶代理:通過瀏覽器分組用戶代理
SELECT useragent, COUNT(useragent) AS c
FROM hitstable
GROUP BY useragent
ORDER BY c DESC
但我想按瀏覽器,無論版本或改變其他數據。我希望它能輸出一個列表,列出瀏覽器的普遍程度。
我該怎麼做?
我有一個表,每行包含有關用戶加載頁面的數據。其中一個字段是該命中的用戶代理。我怎樣才能通過瀏覽器對結果進行分組?我可以按普通用戶代理:通過瀏覽器分組用戶代理
SELECT useragent, COUNT(useragent) AS c
FROM hitstable
GROUP BY useragent
ORDER BY c DESC
但我想按瀏覽器,無論版本或改變其他數據。我希望它能輸出一個列表,列出瀏覽器的普遍程度。
我該怎麼做?
請參閱php的get_browser()函數以從用戶代理字符串中識別它。您需要遍歷所有用戶代理字符串,計算每個字符串的結果。
想到兩種方法。
1)添加一個只存儲瀏覽器名稱的列。這將使得通過瀏覽器進行分組變得非常容易,代價是讓表格變大。您可以使用Chris建議的get_browser()函數。
2)分別使用REGEXP或LIKE查詢(LIKE「%chrome /%」)查詢每個瀏覽器的結果,然後將結果合併在一起。這將不需要任何額外的空間,但它會使您的查詢更具問題。
您可以在group http user agent sql上找到用於對不同用戶代理/版本進行排序的SQL語句(MySQL和SQL Server)。它基於RegExp和來自流行瀏覽器的開關案例SQL。
我發現使用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`;