基于来自其他表mySQL的最低排名属性更新表上的属性

时间:2015-11-12 04:27:00

标签: mysql triggers

我使用MySQL进行以下操作:我有2个表,sw_productssw_components。每个sw_product可以由多个sw_components组成。还有另一个关系表,其中每一行指定产品及其使用的组件。

每个sw_component都有一个状态:'准​​备好',' not-ready','不可用'。每个sw_product的状态也与其所有组件的最低状态相对应。

我正在尝试的是在sw_components更新时创建TRIGGER更新,但是我需要循环使用sw_productssw_component的所有function fire(){ var ref = cordova.InAppBrowser.open('http://rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr', '_blank', 'location=no','zoom=no','hardwareback=no', 'clearsessioncache=no', 'clearcache=yes'); 如果新状态更高,则更改其状态。我怎么能在触发器内执行此操作? (将一个变量分配给一个select语句,然后循环遍历每一行?)

Here are the tables I've created

谢谢!

1 个答案:

答案 0 :(得分:0)

我是OP。经过一番思考,我能够解决问题。正如Ultimater所说,你可以使用游标,但它们只读,所以你可能会遇到麻烦,我认为它们过于复杂(但仍然,谢谢!)。

我所做的是将状态从VARCHARS更改为INTEGERS,然后我创建了每个产品的View以及最低状态(使用MIN(状态):

CREATE VIEW product_status_by_component AS
SELECT s_name, s_version, min(status) AS min
FROM sw_components
JOIN sw_build
ON sw_components.name = c_name AND sw_components.version = c_version
GROUP BY s_name, s_version;

然后每次更新组件状态时都会使用触发器。我发现你更新不相关的表,即使触发器不属于它们,并且你可以在更新中连接表:

UPDATE sw_products a 
    LEFT JOIN product_status_by_component b ON
        a.name = b.s_name AND a.version = b.s_version
    SET 
        a.status = b.min;