Mysql 选择不同的,但按24小时分组?

Mysql 选择不同的,但按24小时分组?,mysql,sql,Mysql,Sql,好的,我正在创作文章。每次用户打开文章时,他们的IP、文章id和日期都会保存到MySQL中 $date = time(); $sql = "INSERT INTO views(ip,article,date) VALUES(?,?,?)"; $stmt = $mysql->prepare($sql); $stmt->bind_param('sss', $_SERVER['REMOTE_ADDR'],$_GET['id'],$date); $stmt->execute(); 现

好的,我正在创作文章。每次用户打开文章时,他们的IP、文章id和日期都会保存到MySQL中

$date = time();
$sql = "INSERT INTO views(ip,article,date) VALUES(?,?,?)";
$stmt = $mysql->prepare($sql);
$stmt->bind_param('sss', $_SERVER['REMOTE_ADDR'],$_GET['id'],$date);
$stmt->execute();
现在,我想获得独特的视图,我知道如何使用DISTINCT实现这一点。但这并不完全是我想做的。它将获得所有时间的独特视图,但我希望每个用户的视图每24小时计算一次

假设我是A个人,有B个人。我们都看这篇文章。总独特的意见将是2。明天我再看这篇文章,它仍然会显示2个视图,但我希望它显示3个视图,因为它已经24小时了

我可以通过检查他们是否看过这篇文章而不将他们的视图计数添加到数据库中来实现这一点,但我不想这样做。我需要另一种方法


谢谢。

您需要一个带有
计数的
分组依据
,但是如果
日期
是数据类型datetime,那么您只需要按日期部分分组,如下所示:

SELECT CAST(date AS DATE) AS Date, article, COUNT(DISTINCT ip) AS TotalViews
FROM views 
WHERE article = $articleId
  AND DATE>= now() - INTERVAL 1 DAY
GROUP BY  CAST(date AS DATE), article
LIMIT 0, 25;
我希望每个用户的视图每24小时计算一次

只需使用两个参数来计数(不同)

如果您希望每天都有一个单独的结果,那么将日期逻辑放在
分组中:

select article, date(date), count(distinct ip)
from v
group by article, date(date);

但是,这似乎不是您要问的问题。

对不起,这太令人困惑了。我应该将文章ID放在哪里,以便它知道要获取哪些文章的视图?我是MySQL的初学者,谢谢你的快速回复!谢谢。@jarlh-应该投否决票对不起,只是复制和粘贴:DJust尝试了,我得到了这个错误:怎么了(@RRecords这是我的错,你必须从群中删除别名,请尝试我的更新答案。谢谢。刚刚尝试过,我相信它有效。如果让我们假设我希望过去一周的视图按24小时分组,有没有办法修改?@RRecords…一个非常没有帮助的评论。你应该解释一下它是如何工作的。
select article, date(date), count(distinct ip)
from v
group by article, date(date);