统计每月唯一身份访问者,以便在图表

时间:2016-08-07 13:47:37

标签: php mysql date visitors

我有一个表格,用于按多个网站的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的这种日期检查并不好。

1 个答案:

答案 0 :(得分:2)

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