mysql表名为“ Profile”的数据如下

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


另一个名为“ Active”数据的mysql表如下

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


请注意表“活动”列-active_capacity是动态的,其值由另一个脚本每秒更改一次。

我想确定我的user_id #101是否命中/超过其允许的active_capacitymax_capacity,这是“个人资料”表中的5。请注意,“活动”表显示user_id #101现在其active_capacity7

我想定义最大匹配值,例如$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”

请注意:我仅在“活动表”中的hits减小并再次增加其active_capacity值并从“个人资料”表

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

谢谢。

最佳答案

您可以使用MySQL的on duplicate key update功能将其作为一条语句来完成。假设user_id是Danger表上的主键。 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;


Example SQLFiddle

08-27 04:21