我使用MySQL进行以下操作:我有2个表,sw_products
和sw_components
。每个sw_product
可以由多个sw_components
组成。还有另一个关系表,其中每一行指定产品及其使用的组件。
每个sw_component
都有一个状态:'准备好',' not-ready','不可用'。每个sw_product
的状态也与其所有组件的最低状态相对应。
我正在尝试的是在sw_components
更新时创建TRIGGER更新,但是我需要循环使用sw_products
和sw_component
的所有function fire(){
var ref = cordova.InAppBrowser.open('http://rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr', '_blank', 'location=no','zoom=no','hardwareback=no', 'clearsessioncache=no', 'clearcache=yes');
如果新状态更高,则更改其状态。我怎么能在触发器内执行此操作? (将一个变量分配给一个select语句,然后循环遍历每一行?)
谢谢!
答案 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;