计算每月唯一身份访问者以显示在图表上

counting unique monthly visitors to display on graph

我有一个 table 可以通过 IP 地址、首次访问日期和最后一次访问日期记录多个网站的访问者。两个日期都是日期时间格式,如 2016-08-07 12:14:44。每条记录都特定于一个网站引用。

我正在尝试按年份和月份列出过去 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 次以获得未返回的访问者的最终计数。尽管此代码返回错误。当我设法让它工作时,它只计算了 10,这是不正确的。

它在我添加 date_first_viewed = date_last_viewed 后显示错误,我猜这可能是错误的。虽然我需要确保 date_first_visited 与数据库中的 date_last_visited 相同,但结果是回头客。

有人可以在这里指出正确的方向并让我知道我做错了什么吗?我不太喜欢用 MySQL 进行此类日期检查。

你说你想要每个月的所有唯一身份访问者。但是,我会将您的查询描述为每月获取所有一次性访问者。如果是这样,您似乎需要 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'