Mysql 使用密钥的Sql组结果

Mysql 使用密钥的Sql组结果,mysql,sql,Mysql,Sql,我不知道如何说我需要在编程语言中做什么。这是我的要求 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

我不知道如何说我需要在编程语言中做什么。这是我的要求

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蓝色

看起来您可以在
al.name
上使用a
功能,然后将结果与
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返回
“褪色短袖T恤”
部分,而al.name返回(例如)
“s”
“橙色”
部分。)

对查询进行这些更改后,如果在选择列表中也返回
al.id\u属性
,那么MySQL将只从组中的一行返回该列的值。要获取以逗号分隔的列表形式返回的所有值,您可以再次使用选择列表中的
GROUP\u CONCAT
函数,例如

GROUP_CONCAT(al.id_attribute ORDER BY al.id_attribute) AS id_attribute_list

你的问题是什么?顺便说一句,“左连接x,其中x”与内部连接相同JOIN@GordonLinoff我需要打印产品名称和产品属性,在我的示例中,这是尺寸和颜色。此属性在com.id\u product\u属性中分组。我正在寻找该组和concat witch产品名称。看看屏幕截图,并举例说明打印需要的外观。你现在知道我需要做什么了。我第一次构建大型sql查询并使用concat。在您的sql中,我有一个错误1064-您的sql语法有一个错误;请查看与MySQL服务器版本对应的手册,以了解在第2行将“GROUP CONCAT(al.name SEPARATOR”“ORDER BY al.id_attribute)”用作ps产品时使用的正确语法。我发现错误,您编写了GROUP CONCAT,但忽略了下划线