使用密钥的Sql组结果

时间:2014-04-17 20:29:03

标签: mysql sql

我不知道怎么说在编写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

这就是结果 http://s6.ifotos.pl/img/Screensho_exsxssh.png

可以打印

褪色短袖T恤S橙色

褪色短袖T恤S Blue

1 个答案:

答案 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