0

こんにちは、ユーザーのブラウザに関するデータベースログを取得しました。これには、f.ex:Firefox 6.0.2、Firefox 6.0.0 Chrome 14.0.835.163、およびその他のバージョンが表示されます。

それはすべてブラウザのバージョンに関するものです。私の質問は、ブラウザ名が-> firefox(すべてのバージョン)、chrome(すべてのバージョン)であるSQLの質問を行うことが可能です。そして、私はそれらを数える必要があります今私はこのようなものを手に入れました:

SELECT `logs`.`log_browser`, COUNT(*) AS `amount` 
FROM `logs` GROUP BY `log_browser`

しかし、Firefox6.0.2とFirefox6.0.0が異なる行として返されます。それは可能ですか?それとも、結果を使用してphpで実行する必要がありますか?

4

4 に答える 4

2

あなたはこれを行うことができます

SQL フィドル

select REPLACE(log_browser, substring_index(log_browser,' ',-1),'') log_browser, 
count(*) cnt
from logs group by log_browser;
于 2012-11-14T22:36:46.053 に答える
1

このようなものはどうですか?これはLOCATE、最初のスペースを検索するために使用され、ブラウザ名の左側の部分でグループ化して返します。

SELECT LEFT(log_browser, LOCATE(' ', log_browser)) AS browser, COUNT(*) AS amount
FROM logs
GROUP BY LEFT(log_browser, LOCATE(' ', log_browser))

実際に見る

スキーマ

CREATE TABLE ログ (
  log_browser varchar(25));

INSERT INTO ログの値
(「Firefox 6.0.2」)、
(「Firefox 6.0.0」)、
(「クローム 14.0.835.163」)

結果

| | ブラウザ | 金額 |
----------------------
| | クローム | 1 |
| | Firefox | 2 |
于 2012-11-14T22:35:50.103 に答える
0

実行速度が問題にならない場合は、以前に与えられた (他の誰かによって - しかし削除された) 回答の拡張バージョンが役立ちます。他のブラウザ名を追加し、OR を使用して異なる構文をグループ化できます

SELECT CASE 
WHEN `log_browser` like '%Firefox%' Then 'FIREFOX'
WHEN `log_browser` like '%Chrome%%' Then 'CHROME'
WHEN `log_browser` like '%Explorer%' Then 'INTERNET EXPLORER'
WHEN `log_browser` like '%Opera%%' Then 'OPERA'
ELSE LEFT(log_browser,10) 
END Browser, count(*) from logs
group by 
CASE 
WHEN `log_browser` like '%Firefox%' Then 'FIREFOX'
WHEN `log_browser` like '%Chrome%%' Then 'CHROME'
WHEN `log_browser` like '%Explorer%' Then 'INTERNET EXPLORER'
WHEN `log_browser` like '%Opera%%' Then 'OPERA'
ELSE LEFT(log_browser,10) 
END
于 2012-11-14T23:06:13.487 に答える
-1

ブラウザが最大 n 文字で自分自身を識別すると仮定すると、group by 句で部分文字列関数を使用することができます。たとえば、chrome は 6 文字で実行できます。

SELECT `logs`.`log_browser`, COUNT(*) AS `amount` 
FROM `logs` GROUP BY SUBSTRING(`log_browser`,1,6)
于 2012-11-14T22:45:28.763 に答える