0

我有一个表格,按 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 进行这些日期检查。

4

1 回答 1

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'
于 2016-08-07T13:54:10.283 回答