示例 mysql表名为“Profile”的数据如下
----------------------
user_id | max_capacity
----------------------
100 3
101 5
103 10
另一个名为“Active”的 mysql 表数据如下
-------------------------
user_id | active_capacity
-------------------------
101 7
103 5
请注意表“Active”列 - active_capacity
是动态的,其值每秒都会由另一个脚本更改。
我想确定我的 user_id #101
是否已命中/超过其允许的 max_capacity
的 active_capacity
,即 5
在“配置文件”表中。请注意“Active”表显示 user_id #101
其 active_capacity
现在为 7
。
如果我的 user_id #101
首先命中/超过其 max_capacity
,我想定义最大命中值,例如 $hit=2
然后我想将其值存储到另一个名为“Danger”的表中
存储 user_id #101
因为它的 active_capacity 现在是 7,超过了它的 max_capacity
mysql表“Danger”数据如下
--------------
user_id | hits
--------------
101 1
5分钟后,mysql表“Active”中的user_id #101
其active_capacity
减少到4
又过5分钟后,mysql表“Active”中的user_id #101
其active_capacity
增加到10
,所以在这里我想更新“危险”表 user_id #101
列 点击
为“2”
请注意:我想仅在“事件表”中的 active_capacity
减少并再次减少其 active_capacity 后更新“危险”表列
值增加并达到/超过“配置文件”表中的 hits
值max_capacity
值
该脚本将在 cron 作业中运行。我需要建议,实现上述目标最有效的方法是什么。
谢谢。
最佳答案
您可以使用 MySQL 的重复键更新
功能将其作为一条语句来完成。这假设 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;
关于php - 如何确定容量达到最大容量的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25832441/