4

ユーザーによるページの読み込みに関するデータを各行に含むテーブルがあります。フィールドの 1 つは、そのヒットのユーザー エージェントです。ブラウザーごとに結果をグループ化するにはどうすればよいですか? 一般的なユーザー エージェントでグループ化できます。

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

しかし、バージョンや変更されるその他のデータに関係なく、ブラウザごとにグループ化したい. ブラウザをどれだけ一般的であるかをリストしたリストを出力したいと思います。

これどうやってするの?

4

4 に答える 4

4

ブラウザ、オペレーティング システム、およびビット アーキテクチャを解析するには、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`;
于 2016-11-04T11:43:43.763 に答える
1

グループ http user agent sqlで個別のユーザー エージェント/バージョンをソートするための SQL ステートメント (MySQL および SQL Server) を見つけることができます。これは、RegExp に基づいており、一般的なブラウザーの SQL の大文字と小文字を切り替えます。

于 2013-08-19T14:36:33.617 に答える
0

ユーザーエージェント文字列から識別するには、php の get_browser() 関数を参照してください。すべてのユーザー エージェント文字列をループして、それぞれの結果をカウントする必要があります。

于 2012-05-12T01:05:49.587 に答える
0

2 つのアプローチが思い浮かびます。

1) ブラウザ名のみを格納する列を追加します。これにより、テーブルが大きくなりますが、ブラウザーごとにグループ化することが非常に簡単になります。Chris が提案したget_browser()関数を使用できます。

2) REGEXP または LIKE クエリ (LIKE "%chrome/%") を使用して各ブラウザーの結果を個別にクエリし、結果を結合します。これには追加のスペースは必要ありませんが、クエリがより問題になります。

于 2012-05-12T01:12:12.813 に答える