选择不同但是将它们分组24小时?

时间:2017-10-16 09:03:03

标签: 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();

现在,我想获得独特的观点,我知道如何使用DISTINCT执行此操作。但这并不完全是我想要做的。它将获得有史以来独特的视图,但我希望每个用户的视图每24小时计算一次。

说我是A人而且是B人。我们都看文章。总的独特视图将是2.明天我再次查看该文章,它仍会显示2个视图,但我希望它显示3个视图,因为它已经24小时。

我可以通过检查他们是否查看了文章因此没有将他们的视图计数添加到数据库来做到这一点,但我不想这样做。我需要一种替代方式。

谢谢。

2 个答案:

答案 0 :(得分:1)

您需要DATE '0000-00-00' TIME '00:00:00' DATETIME '0000-00-00 00:00:00' TIMESTAMP '0000-00-00 00:00:00' YEAR '0000' GROUP BY,但如果COUNT的数据类型为datetime,则您需要按日期部分进行分组,如下所示:

date

答案 1 :(得分:0)

  

我希望每24小时都能看到每个用户的视图。

只需使用count(distinct)的两个参数:

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

如果您想要每天单独的结果 ,请将日期逻辑放在group by

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

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