mysql - 使用计算值或触发器来更新同一表中不同行的数据的行?
问题描述
2019-08-15
我希望为for 进行插入mainKey = 1
,如果总数大于200
on2019-08-14
我想将最后一列的差异保存在为2019-08-15
. total
是一个可以保持不变或增加的值。
+------------+---------+-------+--------------------------+
| date | mainKey | total | differenceSinceYesterday |
+------------+---------+-------+--------------------------+
| 2019-08-14 | 1 | 200 | 0 |
| 2019-08-14 | 2 | 500 | 0 |
+------------+---------+-------+--------------------------+
date
并mainKey
一起唯一标识该行,因此特定行mainKey
每天只能插入一次。
+--------------------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+---------+------+-----+---------+-------+
| date | date | NO | PRI | NULL | |
| mainKey | int(11) | NO | PRI | NULL | |
| total | int(11) | NO | | NULL | |
| differenceSinceYesterday | int(11) | NO | | NULL | |
+--------------------------+---------+------+-----+---------+-------+
我查看了触发器,但如果在更新后运行它会变得递归,因为它是同一个表。或者我应该将逻辑转移到首先插入的外部脚本并运行另一个SELECT
以查找具有特定内容的 1 天旧行mainKey
并更新今天的行?
解决方案
您可以使用触发器实现您想要的BEFORE INSERT
,检查total
前一天的 >= 200 的值,如果存在,则将该differenceSinceYesterday
值设置为今天和昨天总数之间的差异:
DELIMITER //
CREATE TRIGGER updateDifference
BEFORE INSERT ON table1
FOR EACH ROW
BEGIN
DECLARE yesterday INT;
SELECT total INTO yesterday FROM table1 WHERE date = NEW.date - INTERVAL 1 DAY AND mainKey = NEW.mainKey;
IF yesterday >= 200 THEN
SET NEW.differenceSinceYesterday = NEW.total - yesterday;
END IF;
END;
DELIMITER ;
INSERT INTO table1 (date, mainKey, total)
VALUES ('2019-08-15', 1, 400), ('2019-08-16', 1, 300);
SELECT * FROM table1
输出:
date mainKey total differenceSinceYesterday
2019-08-14 00:00:00 1 200 0
2019-08-14 00:00:00 2 500 0
2019-08-15 00:00:00 1 400 200
2019-08-16 00:00:00 1 300 -100
推荐阅读
- java - 将 Google Teachable Machine Model 集成到 Java 应用程序
- python - 当玩家击中目标超过 3 次时结束 pygame
- excel - 验证列表循环未在工作表之间引用,错误 1004
- php - 在 codeigniter 3 中找不到 404
- c# - 如何向我的 ObservableCollection 添加新条目
- c# - 在 MVC 5 中通过 RichTextEditor 插入 PDF 时出错
- javascript - 在现代 JavaScript 中使用更新的嵌套属性创建新对象的最佳方法是什么
- html - Angular - 限制来自 a 的函数调用
- html - React Bootstrap 响应模式无法正常工作
- intellij-idea - IntelliJ 2019 滚动到项目选项菜单中缺少的源