個々の Web サイト訪問のセッション ID、IP アドレス、タイムスタンプ、および関連するすべてのページビューをデータベースに保存しています。より多くのデータが含まれていますが、ここに関連するデータは次のクエリで抽出されます。
SELECT
Pageviews.id, Visitors.time, Visitors.session, Visitors.ip
FROM Visitors
INNER JOIN Pageviews
ON Visitors.session=Pageviews.session
ORDER BY Visitors.time ASC
次のような結果になります。
id time session ip
1048 1371473496 nhie5sh2tiufs2ufupcremc6c2 x88.xxx.xxx.xxx
1050 1371474103 8hfphqvq5ri6muc84oidp7q195 x6x.xxx.xxx.xxx
1062 1371474956 hhgssr4v26pjbilkg8d81olqj7 xxx.x3x.xxx.xxx
1066 1371476339 ic8iqd0a4mpoelni15n4tq3404 x1x.xxx.xxx.xxx
1067 1371476629 ockivrm61upk7ss5ni4n8muv23 x2x.xxx.xxx.xxx
1070 1371477856 5tdj9rrd1qsvafovufnkgh8r26 xxx.xxx.x7x.xxx
1068 1371477856 5tdj9rrd1qsvafovufnkgh8r26 xxx.xxx.xxx.x2x
1069 1371478229 5e82v29nuf2k46ir13i21msps5 xxx.x5x.xxx.x8x
訪問者 (個別の IP)、訪問 (個別のセッション)、およびページビュー (個別のページビュー ID) の合計数を取得するために、次のようにデータベースにクエリを実行します。
SELECT
count(distinct(Visitors.ip)) as 'Visitors',
count(distinct(Visitors.session)) as 'Visits',
count(Pageviews.id) as 'Pageviews'
FROM Visitors
INNER JOIN Pageviews
ON Visitors.session=Pageviews.session
以下のようなものが返されます。
Visitors Visits Pageviews
211 244 412
ただし、保存されたタイムスタンプを使用して、これらの合計を年、月、日ごとにグループ化したいと考えています。そのデータを取得するために、次のクエリを作成しました。
SELECT
DAY(FROM_UNIXTIME(Visitors.time)) as 'Day',
MONTH(FROM_UNIXTIME(Visitors.time)) as 'Month',
YEAR(FROM_UNIXTIME(Visitors.time)) as 'Year',
count(distinct(Visitors.ip)) as 'Visitors',
count(distinct(Visitors.session)) as 'Visits',
count(Pageviews.id) as 'Pageviews'
FROM Visitors
INNER JOIN Pageviews
ON Visitors.session=Pageviews.session
GROUP BY Year, Month, Day
ORDER BY Year, Month, Day DESC
これは、日付、ページビュー、および訪問が正しいという点で、かなりうまく機能します。
Day Month Year Visitors Visits Pageviews
20 6 2013 40 43 59
19 6 2013 80 90 112
18 6 2013 62 66 173
17 6 2013 43 45 68
ご覧のとおり、ここでのページビューの合計は 412 を超えており、訪問数は 244 を超えています。代わりに 225 に変更しました。なぜこれが訪問者数だけに起こっているのかわかりません。
長い質問で申し訳ありません。どんなアイデアでも大歓迎です。