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

标签 php mysql sql

示例 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_capacityactive_capacity,即 5 在“配置文件”表中。请注意“Active”表显示 user_id #101active_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 #101active_capacity减少到4

又过5分钟后,mysql表“Active”中的user_id #101active_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;

Example SQLFiddle

关于php - 如何确定容量达到最大容量的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25832441/

相关文章:

对表 B 范围内的表 A 值进行 SQL 联接

mysql - 无法排除未 JOIN 的记录

php - 单行重复而不是显示

php - 当 csv 表标题与 mySQL 表标题不匹配时使用 LOAD DATA INFILE 语句?

mysql - 使用 SQL 连接时如何合并/组合数据?

MySQL 更新查询不适用于不同的列

php - Symfony 管理生成器日期时间选择器

php - Apache 内存错误

mysql - 如果 ON 条件在 mysql 中没有匹配数据,如何获取 NULL

php - 如何使用 JOIN 从 PHP 查询 mysql?