2013-06-27 45 views
0

我正在尝试在一行上对所有功能和值进行分组。有人推荐GROUP_CONCAT,但当我这样做时,我失去了所有其他产品。下面是SQL调用我现在有将列分组为行SQL

SELECT ps_product_lang.name, CONCAT(ps_feature_lang.name) AS feature, ps_feature_value_lang.value FROM ps_product LEFT JOIN ps_product_lang ON ps_product_lang.id_product = ps_product.id_product LEFT JOIN ps_feature_product ON ps_feature_product.id_product = ps_product.id_product LEFT JOIN ps_feature_lang ON ps_feature_lang.id_feature = ps_feature_product.id_feature LEFT JOIN ps_feature_value_lang ON ps_feature_value_lang.id_feature_value = ps_feature_product.id_feature_value 

,给了我这样的

name     feature value 
MRO Plus Heavy Pad  Height 5 
MRO Plus Heavy Pad  Width 12 
MRO Plus Heavy Pad  Depth 13 
MRO Plus Heavy Pad  Weight 15 
ENV810™ Sorbent Boom  Height 88 
ENV810™ Sorbent Booms Width 50 
ENV810™ Sorbent Booms Depth 23 
ENV810™ Sorbent Booms Weight 45 
ENV510™ Sorbent Booms NULL NULL 
MRO Plus Medium Pad  NULL NULL 

一回当我尝试GROUP_CONCAT我的结果看起来是这样的。

Name    Feature             Value 
MRO Plus Heavy Pad Height,Width,Depth,Weight,Height,Width,Depth,Weigh... 5,12,13,15,88,50,23,45 

有没有在MySQL的方式来得到它看起来像这样

Name     Feature       Value 
MRO Plus Heavy Pad  Height, Width, Depth, Weight  5, 12, 13, 15 
ENV810 Sorbent Boom  Height, Width, Depth, Weight  88, 50, 23, 45 
ENV510 Sorbent Boom  Null        Null 
MRO Plus Medium pad  Null        Null 

任何帮助将不胜感激!

+2

加上'GROUP BY ps_product_lang.name'到您的查询 – PinnyM

+0

OMG谢谢你,我无法相信我错过了。 –

回答

2

GROUP_CONCAT是一个MySQL specific aggregate function,它与GROUP BY子句配合使用。您必须在查询结尾指定带有GROUP_BY子句的列才能使其工作。

样品:

SELECT ps_product_lang.name, GROUP_CONCAT(ps_feature_lang.name) AS feature, ps_feature_value_lang.value FROM ps_product LEFT JOIN ps_product_lang ON ps_product_lang.id_product = ps_product.id_product LEFT JOIN ps_feature_product ON ps_feature_product.id_product = ps_product.id_product LEFT JOIN ps_feature_lang ON ps_feature_lang.id_feature = ps_feature_product.id_feature LEFT JOIN ps_feature_value_lang ON ps_feature_value_lang.id_feature_value = ps_feature_product.id_feature_value GROUP BY ps_product_lang.name