group by但保存所有记录的product_id

时间:2011-06-15 20:00:32

标签: php mysql group-by

这是我的查询

select p.product_id, ts.name as my_name, ss.step_number, p.specs, SUM(p.price),  ssp.class_id
from optional_system_step  as ss
join system as s on s.system_id=ss.system_id
join category_description  as cd on cd.category_id=ss.category_id
join optional_system_step_product as  ssp on ss.system_step_id=ssp.system_step_id
join product as p on  p.product_id=ssp.product_id
join product_description as pd on  pd.product_id=p.product_id
join template_step as ts on  (ts.template_id=s.optional_template_id and ts.step_number=ss.step_number)
where s.system_id = '15' 
GROUP BY ssp.class_id, ss.step_number
order by ss.step_number, ssp.class_id; 

返回正确的总和,但它只返回product_id的

之一
78  sdzvzcxv    1       4047.0000   1
143 sdzvzcxv    1       628.0000    2
59  sdzvzcxv    1       962.0000    3
57  another 2       638.0000    1
134 another 2       858.0000    2
62  another 2       548.0000    3
98  xzcvzxc 3       863.0000    1
106 xzcvzxc 3       634.0000    2
98  xzcvzxc 3       1168.0000   3

我想知道是否有办法在group by之前收集product_id,并将它们添加到字段中,也可以用逗号分隔

78,55,66    sdzvzcxv    1       4047.0000   1
143,77,88   sdzvzcxv    1       628.0000    2
59,77,88    sdzvzcxv    1       962.0000    3
57,77,88    another 2       638.0000    1
134,77,88   another 2       858.0000    2
62,77,88    another 2       548.0000    3
98,77,890   xzcvzxc 3       863.0000    1
106,76,88   xzcvzxc 3       634.0000    2
98,57,87    xzcvzxc 3       1168.0000   3

1 个答案:

答案 0 :(得分:2)

在MySQL中,您可以使用GROUP_CONCAT()将所有分组值作为单个字段返回。但是,该函数的默认最大长度限制为1024个字符,之后它将以静默方式删除可能已显示的任何其他值。您可以使用group_concat_max_len系统变量提升限制。

当然,在您的示例查询中,您实际上并没有对p.product_id字段进行分组,因此这可能不会产生您想要的效果。