从 Prestashop 中具有给定属性的产品中获取特定组合

Get a specific combination from product with given attributes in Prestashop

我为我的模块构建了一个自定义 SQL 查询,以检索具有 id_product 和多个属性 ID 的产品的所有组合,但目前,我只能 select 使用一个属性,仅此而已,我真的错过了一些东西,但还没有找到它。

为了了解上下文,这是我查找产品及其结果的所有组合(颜色和尺寸)的查询:

SELECT
    p.id_product,
    pq.quantity,
    pa.price AS price_diff,
    p.price,
    pai.id_image,
    pl.name,
    GROUP_CONCAT(agl.id_attribute_group, ':', pal.id_attribute ORDER BY agl.id_attribute_group SEPARATOR ", ") as combination_ids,
    GROUP_CONCAT(pal.name ORDER BY agl.id_attribute_group SEPARATOR ", ") as combination
FROM ps_product p
LEFT JOIN ps_product_attribute pa ON (p.id_product = pa.id_product)
LEFT JOIN ps_stock_available pq ON (p.id_product = pq.id_product AND pa.id_product_attribute = pq.id_product_attribute)
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_product_attribute_combination pac ON (pa.id_product_attribute = pac.id_product_attribute)
LEFT JOIN ps_attribute_lang pal ON (pac.id_attribute = pal.id_attribute)
LEFT JOIN ps_attribute a ON (pal.id_attribute = a.id_attribute) 
LEFT JOIN ps_attribute_group_lang agl ON (a.id_attribute_group = agl.id_attribute_group) 
LEFT JOIN ps_product_attribute_image pai on(pa.id_product_attribute = pai.id_product_attribute)
WHERE pl.id_lang = 1
AND pal.id_lang = 1
AND agl.id_lang = 1
AND p.id_product = 3196 -- My product
GROUP BY pac.id_product_attribute

结果

具有单个属性的查询(本例中大小为 S):

......................
......................
AND p.id_product = 3196 -- My product
AND agl.id_attribute_group = 9 -- size
AND pal.id_attribute = 761 -- 'S' size for my case
GROUP BY pac.id_product_attribute

但是指定尺寸和颜色都没有成功,知道吗?

我想你想要一个 HAVING 子句。要过滤两个属性,逻辑为:

SELECT ...
FROM ...
WHERE ...
GROUP BY pac.id_product_attribute
HAVING 
    MAX(agl.id_attribute_group = 9 AND pal.id_attribute = 761) = 1
    AND MAX(agl.id_attribute_group = 2 AND pal.id_attribute = 727) = 1

我应该警告你的代码不是有效的聚合查询。您需要 GROUP BY 子句中的更多列来修复该缺陷。没有看到您的数据很难确定,但是,对每个 table:

的主键有一些假设
GROUP BY 
    p.id_product, 
    pa.id_product_attribute, 
    pac.id_product_attribute,  
    pai.id_image,
    pq.id  -- if that exists?