我有一个允许用户向他们的客户发送消息的系统。我想将用户限制为每天/每周/每月的x消息量(取决于订阅)。什么是计算时间段的好方法,并在时间段重新启动后重置计数?我想结合某种SQL工作来重置计数。
答案 0 :(得分:1)
表限制(id,client_id,limit_days,msg_count);
假设限制从午夜,周日和月中开始计算。
新客户获得三条记录,每条记录的limit_days分别为1,7和31。
Cron工作在午夜运行重置 msg_count = DayLimit,其中limit_days = 1; msg_count = WeekLimit,其中limit_days = 7,工作日(current_date)= 1 msg_count = MOnthLimit其中limit_days = 31和day(current_date)= 1
如果min(msg_count)>,则允许发送消息。 0其中client_id ='$ client_id' 然后发送msg和更新限制设置msg_count = msg_count - 1其中client_id ='$ client_id'
答案 1 :(得分:1)
每次发送一组消息时,请记录发送的消息的日期和数量。然后,您的应用程序可以对消息计数字段求和,按日期,一年中的某一周或日期的年份进行分组,以强制执行限制。用于将用户限制为特定数字的where子句将使用用户配置文件表或某些全局设置表中的消息限制,开始日期和停止日期。
在MySql方言中,你会写这样的东西:
select
users.id,
(users.msg_limit - subq.msgs_used) as msgs_available
from users
inner join (select
sum(msg_log.cnt) as msgs_used
from msg_log
where weekofyear(msg_log.date) = weekofyear(now())
and msg_log.user = :user_id_param) as subq;