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 #101
其active_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 #101
列hits
的"危险"表更新为"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