使用GROUP_CONCAT

使用GROUP_CONCAT

问题描述:

我有一个叫做“股票”表一个复杂的SQL查询:使用GROUP_CONCAT

 
    stock_id | prod_id | size | color | shop_id | qty 

    1  | 4  | L | Red | 1 | 3 
    2  | 4  | XL | Blue | 2 | 1 
    3  | 4  | L | Red | 3 | 2 
    4  | 2  | XXL | White | 1 | 7 
    5  | 4  | L | Red | 4 | 1 

一些认。

我有一个产品表和一个商店表。

我想作为结果什么是类似的东西:

 
    prod_id | prod_name | shop_name | color_size_qty 
     4 | T-Shirt | Shop 1 | Red,L,(3) 
     2 | T-Shirt | Shop 1 | White,XXL,(7) 
     4 | T-Shirt | Shop 2 | Blue,XL,(1) 

我不知道你是否能理解我。我得到的最接近的东西就像

prod id | prod_name |  Colors   |  sizes | 
    4 | T-Shirt |Red,Red,Red,Blue,White | L,L,L,XL,XL 

甚至没有如你所见。希望您能够帮助我。

+1

你能告诉我们你有这么远的查询? – Bort 2012-07-13 19:44:44

+0

选择P档。*, GROUP_CONCAT(DISTINCT e.estoque_prod_cor ORDER BY e.estoque_prod_cor)为核, GROUP_CONCAT(DISTINCT e.estoque_prod_tam ORDER BY e.estoque_prod_tam)作为tamanhos 从produtos P,estoqueÈ 其中p。 produto_id = e.produtos_produto_id GROUP BY p.produto_nome – 2012-07-16 11:15:27

简单CONCAT()可能是你所需要的,而不是一个GROUP_CONCAT()

SELECT 
    prod_id, prod_name, shop_name, 
    CONCAT(color, ',', size, ', (', qty, ')') AS color_size_qty 
FROM 
    stock 
    JOIN products ON stock.prod_id=products.id 
    JOIN shops ON stock.shop_id=shops.id 
ORDER BY 
    prod_name ASC, shop_name ASC 
+0

看起来不错,虽然它是你得到'列'prod_id'在字段列表是不明确的'。只需要消除歧义,它就像一个魅力 - [工作示例](http://sqlfiddle.com/#!2/49e1f/2)。 – DaveRandom 2012-07-13 19:58:47

+0

@PauloBarros对不起,你可以得到类似* what *的结果。 – DaveRandom 2012-07-16 11:34:27

+0

@DaveRandom谢谢你的男人。非常。我并不是想打扰你太多,但是我怎样才能改变你的查询,这样我就可以得到如下结果:----------------------- ---------------------------------------- prod_name | shop_name total_prods_per_shop [] | COlor_size_qty(全部在一行中)如下所示:---------------------------------------- ----- T恤| shop1合计(9)|黑色,XL(3)/红色,L(2)/白色,S(4)------ T恤| shop2合计(3)|蓝色,XL(1)/黄色,L(2)....等等。再次感谢你! – 2012-07-16 11:43:01