例
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_capacity
的max_capacity
,这是“个人资料”表中的5
。请注意,“活动”表显示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”请注意:我仅在“活动表”中的
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