【问题标题】:check if it happens in 24 hours检查它是否在 24 小时内发生
【发布时间】:2012-08-14 09:09:04
【问题描述】:

假设我们让用户能够使用我们的网站发送电子邮件,但我们希望限制他们每天(24 小时)发送的电子邮件不超过 30 封。

因此,通过发送每封电子邮件,我们将在表格中插入一条记录,然后当他/她想要发送另一封电子邮件时,我们检查他是否在 24 小时内发送了超过 30 封电子邮件。

我们如何用 PHP 来检查这个?

我们查询db,我们得到这个用户的20条记录,记录日期是:

2012-08-14 13:10:58
2012-08-14 12:45:47
2012-08-14 16:32:18
2012-08-14 19:10:40
...
...
...

我们如何实现这样的规则?

谢谢

【问题讨论】:

  • 一天和24小时有不同的意思,你是指日历间隔还是时间间隔?您可以每天(从 00:00 到 23:59)或在 24 小时间隔内(从 A 天上午 08:30 到 B 天上午 8:30)进行限制。生成的算法将不一样。
  • 我需要它基于 24 小时时间间隔,而不是日历天间隔。 ty
  • @BorisGuéry,这会给我想要的吗? “date_sub(现在(),间隔 1 天)”?还是给出 24 小时日历间隔?谢谢

标签: php mysql date


【解决方案1】:

不要在 PHP 中检查它,使用这样的简单查询立即从他的数据库中获取答案。

select 
    count(*) 
from 
    yourTableName 
where 
    dateCol>date_sub(now(), interval 1 day) 
    and userID=...

这会给你计数。

编辑:正如鲍里斯指出的那样,这将每天计算,您可以将其更改为检查过去 24 小时的时间段,如下所示:

select 
    count(*) 
from 
    yourTableName 
where 
    dateCol>date_sub(now(), interval 24 hour) 
    and userID=...

编辑 2:检查后,Riad 正确指出,这两个实际上返回相同的值。 1 day 被视为正好 1 天,而不是日历日期。如果日期列的日期时间为“2012-08-13: 13:00:00”,date_sub( dateCol, interval 1 day) 将返回“2012-08-12:13:00:00”。

【讨论】:

  • 似乎在 '24 小时'之前需要一个 'INTERVAL' ==> SELECT COUNT(id) FROM TABLE WHERE dateCol > date_sub( now( ) , INTERVAL 24 hour)
  • @behz4d 是的,你是对的,对不起,我总是忘记添加它,然后记住当我收到语法错误时。 +1 并立即编辑。
  • 顺便说一句,date_sub(now(), interval 1 day) == date_sub(now(), interval 24 hour) ,试试select date_sub(now(), interval 24 hour), date_sub(now(), interval 1 day);
  • @RiaD,您是说此查询检查日历 24 小时间隔而不是 24 小时?你能解释一下吗? BorisGuéry 在我帖子的第一条评论中也提到了这个问题,谢谢
  • @behz4d 不,他是说他们会给出相同的结果。无论您使用哪个选项,返回的日期时间都是相同的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 2021-04-03
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多