【问题标题】:Complicated MYSql trigger复杂的MYSql触发器
【发布时间】:2016-04-15 05:29:59
【问题描述】:

我有一个名为“ebaylinked”的表,我试图做的是创建一个触发器来检查字段是否“已处理?”是 1 如果是我希望它使用名为“ebay_ID”的字段并在表“产品”上找到相应的列,产品表上的字段是 'eBay_ID' 当它找到它时,我希望它使用'ebaylinked' 表中的字段'QuantitySold' 并从'product_stock' 中减去int 值 'products' 表中的字段,然后我希望将其更改为 0,以便它不能再次执行此操作。

我什至对如何启动它感到困惑,因为这是一个相当复杂的触发器,如果​​有人能指出我正确的方向,我会非常感激它, 它现在让我发疯......

UPDATE database.product.product_stock
SET product.product_stock=product.product_stock-ebaylinked.QuantitySold,product.Processed? = 0
FROM
database.ebaylinked,
WHERE
database.product.eBay_ID database.ebaylinked.ebay_ID

【问题讨论】:

  • 发布您目前所获得的信息,我们会尽力帮助您朝着正确的方向前进。
  • 尝试添加一些结构和示例数据。阅读 how to askmcve 以了解更受欢迎的问题。
  • 您确定需要触发器而不是存储过程吗?
  • 我对此很陌生,我已经尝试过,但我认为我在错误的行中将其添加到问题中
  • 不知道我是否可以在其中使用减号从另一个字段中取出一个字段,不知道我是否可以将值设置为零,并且不知道如何处理'仅在 Processed 设置为 1 时才执行...

标签: mysql triggers


【解决方案1】:

很抱歉,您的问题很难理解。据我所知,您只是想在某个时候更新产品数量字段并减去 ebay 的销售数量。

这是我为了更新 product_stock 字段而提出的查询:

UPDATE
    product
    JOIN TABLE ebaylinked ON
        ebaylinked.eBay_ID = product.eBay_ID
SET
    product.product_stock = product.product_stock - ebaylinked.QuantitySold
WHERE
    product.`Processed?` = 1

我不确定这些字段名称是否是您的表的名称,也许您可​​以发布表架构?

至于如何触发这个更新,你需要给我们一些更详细的信息,比如什么时候触发。

【讨论】:

    【解决方案2】:

    你需要一个简单的多表更新语句:

    UPDATE product p
    INNER JOIN ebaylinked e ON e.eBay_ID = p.eBay_ID
    SET p.product_stock = p.product_stock - e.QuantitySold, p.processed=0
    WHERE
    p.processed = 1
    

    您可以在触发器中使用上述语句,稍作修改。

    【讨论】:

    • 我已经在(使用 phpmyadmin)继续更新后添加了它,但没有对数据库进行任何更改,看看我是否可以让它工作
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2011-10-19
    相关资源
    最近更新 更多