0

複数の Web サイトについて、訪問者を IP アドレス、最初に訪問した日付、最後に訪問した日付別に記録するテーブルがあります。両方の日付は、のような日時形式です2016-08-07 12:14:44。各レコードは Web サイト参照に固有です。

次のように、過去6か月を年と月ごとにリストしようとしています(Y-m)

2016-08
2016-07
2016-06

など...これを行うことができましたが、コードで個別の訪問者をカウントするのに苦労しています。これまでのところ、次のとおりです。

$this_month = date('Y-m');

$count = mysqli_query($conn, "SELECT COUNT(ip_address)) as count FROM `all_website_stats` WHERE `website_ref` = '$show_website_ref' AND EXTRACT(YEAR_MONTH FROM date_first_viewed) = '$this_month' AND `date_first_viewed` = `date_last_viewed`");
$rowcount=mysqli_num_rows($count);
echo $rowcount;

これを 6 回実行して、戻ってこなかった訪問者の最終的な数を取得します。このコードはエラーを返していますが。そして、私がなんとかそれを機能させることができたとき、それはカウントされた1か、0どちらが間違っているかだけでした.

追加するとエラーが表示されましたが、date_first_viewed = date_last_viewedこれはおそらく間違っていると思います。date_first_visitedがデータベースと同じであることを確認する必要がありdate_last_visitedますが、そうでない場合、結果は代わりにリピーターになります。

誰かがここで私を正しい方向に向けて、私が間違っていることを教えてもらえますか? 私は、MySQL でのこの種の日付チェックが苦手です。

4

1 に答える 1

2

1 か月あたりのすべてのユニーク ビジターが必要だとします。ただし、クエリは、1 か月に 1 回限りの訪問者をすべて取得するものと説明します。もしそうなら、あなたが必要なようですGROUP BY

SELECT EXTRACT(YEAR_MONTH FROM date_first_viewed) as yyyymm,
       COUNT(ip_address)) as count
FROM `all_website_stats` aws
WHERE `website_ref` = '$show_website_ref' AND
      `date_first_viewed` = `date_last_viewed`
GROUP BY EXTRACT(YEAR_MONTH FROM date_first_viewed);

句に条件を追加してWHERE、返される行の期間を指定できます。

句は次のWHEREようになります。

WHERE date_first_viewed >= '2016-01-01'
于 2016-08-07T13:54:10.283 に答える