MySQL 触发函数(3个不同表之间)
MySQL Trigger Function (between 3 different tables)
我有3张表(写成重要部分,不是全部数据):
tableDeviceStatus:
device_id status
--------- ------
device01 15
device02 20
tableDeviceTrigger:
device_id device_operator device_param triggered_device command
--------- --------------- ------------ ---------------- -------
device01 > 22 device80 1
device01 < 18 device87 0
device02 = 1 device89 1
tableDeviceCommand:
device_id command
--------- -------
device80
device87
device89
流量:
- 当 tableDeviceStatus 更新时,我将创建触发器(之后)
- 如果设备已更新,请检查 tableDeviceTrigger 并通过运算符进行比较并更新 tableDeviceCommand
例如:
- device01 更新为 25。
- 有2个比较。检查两者,因为 25>22,将 tableDeviceCommand.device80 更新为 1.
我试过触发器,但无法解决搜索、比较和执行问题。 (因为一个设备可以进行多次比较。我几乎为一行创建了但无法为每一行制定类似的公式并执行)
欢迎来到 Stack Overflow!如果我理解正确,对于在 tableDeviceStatus
中输入的每个新行,您想要在 tableDeviceTrigger.
中使用匹配的 @device_id 测试每一行
对于 tableDeviceTrigger 中的每个匹配行,您测试它是否满足要求 (@status @device_operator @device_param is TRUE
)。对于满足这些要求的每一行,您在 tableDeviceCommand 中添加一行 @triggered_device
和 @command
.
这样的东西行得通吗?
INSERT INTO tableDeviceCommand (device_id, command)
-- maybe REPLACE INTO or UPDATE depending on your requirements
(
SELECT tdt.triggered_device, tdt.command
FROM tableDeviceStatus tds
INNER JOIN tableDeviceTrigger tdt on tds.device_id = tdt.device_id
WHERE
(tdt.device_operator = ">" and tds.status > tdt.device_param) OR
(tdt.device_operator = "<" and tds.status < tdt.device_param) OR
(tdt.device_operator = "=" and tds.status = tdt.device_param)
-- add additional ORs to test the comparison specified by device_operator
)
我有3张表(写成重要部分,不是全部数据):
tableDeviceStatus:
device_id status
--------- ------
device01 15
device02 20
tableDeviceTrigger:
device_id device_operator device_param triggered_device command
--------- --------------- ------------ ---------------- -------
device01 > 22 device80 1
device01 < 18 device87 0
device02 = 1 device89 1
tableDeviceCommand:
device_id command
--------- -------
device80
device87
device89
流量:
- 当 tableDeviceStatus 更新时,我将创建触发器(之后)
- 如果设备已更新,请检查 tableDeviceTrigger 并通过运算符进行比较并更新 tableDeviceCommand
例如:
- device01 更新为 25。
- 有2个比较。检查两者,因为 25>22,将 tableDeviceCommand.device80 更新为 1.
我试过触发器,但无法解决搜索、比较和执行问题。 (因为一个设备可以进行多次比较。我几乎为一行创建了但无法为每一行制定类似的公式并执行)
欢迎来到 Stack Overflow!如果我理解正确,对于在 tableDeviceStatus
中输入的每个新行,您想要在 tableDeviceTrigger.
对于 tableDeviceTrigger 中的每个匹配行,您测试它是否满足要求 (@status @device_operator @device_param is TRUE
)。对于满足这些要求的每一行,您在 tableDeviceCommand 中添加一行 @triggered_device
和 @command
.
这样的东西行得通吗?
INSERT INTO tableDeviceCommand (device_id, command)
-- maybe REPLACE INTO or UPDATE depending on your requirements
(
SELECT tdt.triggered_device, tdt.command
FROM tableDeviceStatus tds
INNER JOIN tableDeviceTrigger tdt on tds.device_id = tdt.device_id
WHERE
(tdt.device_operator = ">" and tds.status > tdt.device_param) OR
(tdt.device_operator = "<" and tds.status < tdt.device_param) OR
(tdt.device_operator = "=" and tds.status = tdt.device_param)
-- add additional ORs to test the comparison specified by device_operator
)