UPDATE行的UPDATE触发器,多桌条件(UPDATE row ON UPDATE trigge

2019-10-21 20:00发布

我与Shopware工作,一个奇怪的事情是我发疯:(所以我将首先解释了什么问题。

除了正常的文章,还有那些与多个变种中,不同尺寸的衬衫。 它在XS,S,M,L和/或不同颜色的同一篇文章......但有不同的ordernumbers,可能不同的价格。

因此,在Shopware你有核心的文章数据,一个与细节数据和一个与可能的价格数据的表。

具有多个变种的文章有configurator_set_id场,并在文章表中的main_detail_id字段集。 我的问题是,我们有很多的变种物品的商店,谁建店的逻辑......大概是喝醉了。 如果变体文章的主要物品是无效的(缺货,失活等)整个变种文章不是可买的了...没有回退到下一个变种,它依然在店里,但你不能做任何东西。

所以我想随和,只是更新文章,如果变异状态的变化...但多数民众赞成在我的问题的真正开始。 所以这里先表结构:

s_articles:

+----+--------+----------------+---------------------+  
| id | active | main_detail_id | configurator_set_id |  
+----+--------+----------------+---------------------+  

s_articles_details:

+------+---------+-----------+
|  id  | active  | articleID |
+------+---------+-----------+

s_articles_prices

+----+-----------+-----------------+-------+
| id | articleID | articledetailID | price |
+----+-----------+-----------------+-------+

要构建的文章,基本上Shopware从s_articles获取数据,从s_articles_details其中id = s_articles.main_details_id数据加入他们。

我试图才达到如下:

  1. 如果s_articles_details被更新,获取得到了更新的行的ID。
  2. 检查ID对应于s_articles表main_detail_id
  3. 如果是更新该行,设置main_detail_id =(s_articles_prices.articledetailID WHERE s_articles_prices.articleID = ID和分钟(s_articles_prices.price))

*我知道这不会工作,但希望它描述了我彪

怪癖:

  • 可存在从s_articles_prices分贝不止一个匹配
  • 它必须是其经由s_articles_details表确定的活性变体/价格

在正确的方向任何帮助或推将grately赞赏(虽然我尽量不撞墙我的头......)

编辑:最终解决方案

让-弗朗索瓦- savard向我指出了正确的方向,所以我想出了以下解决方案:

DELIMITER $$
CREATE TRIGGER update_maindetailid_after_update AFTER UPDATE ON s_articles_details
FOR EACH ROW
BEGIN

    DECLARE ArticleDetailID INT(11);

    SELECT  p.articledetailsID
    INTO ArticleDetailID
    FROM s_articles_prices p, s_articles_details d
    WHERE p.articleID = NEW.articleID 
        AND d.id = p.articledetailsID
        AND d.active
    ORDER BY p.price, d.ordernumber ASC
    LIMIT 1;

    IF ArticleDetailID <> "" THEN
        UPDATE s_articles SET s_articles.main_detail_id = ArticleDetailID 
        WHERE s_articles.id = NEW.articleID
            AND s_articles.main_detail_id <> ArticleDetailID;
    END IF;

END$$;
DELIMITER ;

Answer 1:

  • Trigger是什么您这里需要。
  • 创建将在每次更新上完成的时间发射的扳机s_articles_details
  • 请参阅使用新值NEW的触发器的主体关键字。
  • 根据新的价值,做你的病情,并update/insert其他表中正确的值。

片段来帮助你开始

DELIMITER $$
CREATE TRIGGER tr_au_s_articles_details AFTER UPDATE ON s_articles_details
FOR EACH ROW
BEGIN
   -- Here you can access the id of the updated article New.id
   -- update/insert depending on the condition of the newvalue.
   -- Check if id corresponds to a main_detail_id in the s_articles table
   -- Here an int : select count(id) from s_articles where main_detail_id = new.id
END;
DELIMITER ;

请参见文档有关详细信息, Trigger语法。

我不会用勺子/饲料的代码,但我想你现在应该可以轻松解决这个:)。



文章来源: UPDATE row ON UPDATE trigger, multi table condition