【问题标题】:A complex SQL Query using group_concat使用 group_concat 的复杂 SQL 查询
【发布时间】:2012-07-16 19:50:41
【问题描述】:

我有一个名为“stock”的表:

股票编号 | prod_id |尺寸 |颜色 | shop_id |数量 1 | 4 |大号 |红色 | 1 | 3 2 | 4 |加大码 |蓝色 | 2 | 1 3 | 4 |大号 |红色 | 3 | 2 4 | 2 | XXL |白色 | 1 | 7 5 | 4 |大号 |红色 | 4 | 1

其中一些..

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

我想要的结果是这样的:

prod_id |产品名称 |店铺名 | color_size_qty 4 | T 恤 |店铺 1 |红色,L,(3) 2 | T 恤 |店铺 1 |白色,XXL,(7) 4 | T 恤 |店铺 2 |蓝色,XL,(1)

我不知道你能不能理解我。我得到的最接近的是

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

如您所见,甚至不近。希望你能帮助我。

【问题讨论】:

  • 你能告诉我们你目前的查询吗?
  • SELECT 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) 作为来自 produtos p 的 tamanhos,estoque e WHERE p .produto_id = e.produtos_produto_id GROUP BY p.produto_nome

标签: php mysql sql


【解决方案1】:

一个简单的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

【讨论】:

  • 看起来不错,虽然你得到了Column 'prod_id' in field list is ambiguous。只需要消除歧义,它就像一个魅力 - working example
  • @PauloBarros 抱歉,您可以得到 what 之类的结果?
  • @DaveRandom 谢谢你。非常。我不想打扰你太多,但我怎样才能改变你的查询,所以我可以得到这样的结果:------------------------ ---------------------------------------------------- prod_name | shop_name total_prods_per_shop[] | COlor_size_qty(All in one line) like: ---------------------------------------- ----- T恤 | shop1 共(9) |黑色,XL(3) / 红色,L(2) / 白色,S(4)------T恤 | shop2 总计(3) |蓝色,XL(1) / 黄色,L(2) .... 等等。再次感谢您!
  • @PauloBarros 哦,对了,我明白你的意思了,like this?
  • @DaveRandom 老兄!你真棒!谢谢!现在我了解了如何使用 CONCAT 和 GROUP_CONCAT,我现在非常清楚。再次感谢您。
猜你喜欢
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多