我与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数据加入他们。
我试图才达到如下:
- 如果s_articles_details被更新,获取得到了更新的行的ID。
- 检查ID对应于s_articles表main_detail_id
- 如果是更新该行,设置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 ;