跟踪SQL数据库中的Web应用程序使用情况(需要建议)

时间:2009-11-07 01:36:49

标签: sql sql-server

我有一个允许用户向他们的客户发送消息的系统。我想将用户限制为每天/每周/每月的x消息量(取决于订阅)。什么是计算时间段的好方法,并在时间段重新启动后重置计数?我想结合某种SQL工作来重置计数。

2 个答案:

答案 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;