我不知道怎么说在编写lang时我需要做什么。这是我的要求
SELECT pl.id_product, CONCAT( pl.name, ' ', al.name ) AS produkt, al.id_attribute, com.id_product_attribute
FROM ps_stock_available stock
LEFT JOIN ps_product_lang pl ON pl.id_product = stock.id_product
LEFT JOIN ps_product_attribute_combination com ON stock.id_product_attribute = com.id_product_attribute
LEFT JOIN ps_attribute_lang al ON al.id_attribute = com.id_attribute
LEFT JOIN ps_product_attribute pa ON ( stock.id_product_attribute = pa.id_product_attribute )
WHERE pl.id_lang =1
AND al.id_lang =1
ORDER BY pl.id_product
这就是结果
可以打印
褪色短袖T恤S橙色
褪色短袖T恤S Blue
答案 0 :(得分:1)
您似乎可以在GROUP_CONCAT
上使用 al.name
功能,然后将结果与pl.name
连接起来。
这样的事情:
CONCAT(pl.name,' ',
GROUP_CONCAT(al.name ORDER BY al.id_attribute SEPARATOR ' ')
) AS produkt
为此,您还需要在查询中添加 GROUP BY
子句(紧接在ORDER BY之前或代替ORDER BY),例如:
GROUP BY pl.id_product, com.id_product_attribute
这将有效地“折叠”行,因此查询将返回:
id_produkt produkt id_product_attribute
---------- ------------------------------------- --------------------
1 Faded Short Sleeve T-shirts S Orange 1
1 Faded Short Sleeve T-shirts S Blue 2
(假设pl.name返回 "Faded Short Sleeve T-shirts"
部分,而al.name正在返回(例如) "S"
和 "Orange"
部分。)
通过对查询的这些更改,如果您还在SELECT列表中返回al.id_attribute
,那么MySQL将仅从该组中的单个行返回该列的值。要将所有值返回为逗号分隔列表,您可以再次使用SELECT列表中的 GROUP_CONCAT
函数,例如
GROUP_CONCAT(al.id_attribute ORDER BY al.id_attribute) AS id_attribute_list