如何确定容量达到其最大容量的次数


how to determine how many times capacity hits its max capacity

example名为"配置文件"数据的 mysql 表如下所示

----------------------
user_id | max_capacity
----------------------
100          3
101          5
103          10

另一个名为"活动"数据的 mysql 表如下所示

-------------------------
user_id | active_capacity
-------------------------
101          7
103          5

请注意表"活动"列 - active_capacity动态的,其值每秒都会被另一个脚本更改。

我想确定我的user_id #101是否命中/超过"配置文件"表中5的允许max_capacity active_capacity。请注意,"活动"表显示user_id #101active_capacity现在已7

我想定义最大命中值,例如$hit=2如果我的user_id #101第一次命中/超过其max_capacity,那么我想将其值存储到另一个名为"危险"的表中

存储user_id #101,因为它的active_capacity现在是 7,超过了它的max_capacity

mysql 表"危险"数据如下

--------------
user_id | hits
--------------
101          1

5分钟后,user_id #101 mysql表中的active_capacity"活动"减少到4

又过了 5 分钟,user_id #101其在 mysql 表"活动"中的active_capacity增加到 10,所以在这里我想将user_id #101hits的"危险"表更新为"2">

请注意:只有在"活动表"的active_capacity下降并且其active_capacity值再次增加并达到/超过"配置文件"表中的max_capacity值之后,我才想更新"危险"hits

列的值

此脚本将在 cron 作业中工作。我需要建议,实现上述目标的最有效方法是什么。

谢谢。

您可以使用MySQL的on duplicate key update功能将其作为一个语句来执行此操作。这假定user_id是危险表上的主键。SQL 还假定user_id在其他两个表上是唯一的:

insert into Danger (
    user_id, hits
) select
    p.user_id, 1
from
    Profile p
        inner join
    Active a
        on a.user_id = p.user_id
where
    a.active_capaciy > p.max_capacity
on duplicate key update set
    hits = hits + 1;

示例 SQLFiddle