2011-05-09 78 views
1

我花了几天的时间试图解决这个有限的成功,我敢肯定有一个简单的答案,但迄今为止没有运气,尽管相当多的研究,我害怕问题是我有限的SQL知识。MySQl合并行条件为真的行

我有3张桌子。订单,orders_products和orders_products_attributes。

我试图返回一个结果表给定的顺序,显示相匹配的所有orders_products,并在orders_products_attributes行该产品在那里存在合并(有时没有属性)

我有到这里:

SELECT  oi.orders_id AS orderid 
,   oi.products_id AS ItemNumber 
,   oi.products_quantity AS Quantity 
,   oi.final_price AS CostPerUnit 
,  oi.products_name AS ItemTitle 
,  concat (patt.products_options_id, '-', patt.products_options_values_id) AS OptionCodes 
,  concat (patt.products_options, ': ', patt.products_options_values) AS OptionNames 
FROM  orders_products oi 
JOIN  orders o 
ON  o.orders_id = oi.orders_id 
LEFT JOIN orders_products_attributes patt 
ON   patt.orders_products_id = oi.orders_products_id AND patt.orders_id = oi.orders_id 
WHERE  o.orders_status =2 AND oi.orders_id =10346 
ORDER BY ItemNumber 

这是返回结果如下:

orderid ItemNumber Quantity CostPerUnit ItemTitle OptionCodes OptionNames 

10346 140  1  319.9982 Item 1 3-5  Choice: A 

10346 140  1  319.9982 Item 1 1-1  Choice2: B 

10346 210  1  112.5000 Item 5 NULL  NULL 

我试图合并行且ItemNumber是一样的,CON cat'ing OptionCodes和OptionNames他们存在直到结束:

orderid ItemNumber Quantity CostPerUnit ItemTitle OptionCodes OptionNames 

10346 140  1  319.9982 Item 1 3-5, 1-1 Choice: A, Choice2: B 

10346 210  1  112.5000 Item 5 NULL   NULL 

我一直在试图GROUP_CONCAT这些,但只有在合并所有3行成功。

对不起,如果我很慢,但我似乎无法从这里继续前进。

TIA, 安德鲁

+0

order_products表的主键是什么:products_id? – Thomas 2011-05-09 16:40:25

+0

orders_products_id是该表的主键 – Andrew 2011-05-09 18:57:59

回答

0

你可以通过order_products表的唯一密钥组。由于我不确定这是什么,所以我只用Select子句中的所有列进行分组,除了我使用Group_Concat的列以外。

Select oi.orders_id As orderid 
    , oi.products_id As itemnumber 
    , oi.products_quantity As quantity 
    , oi.final_price As costperunit 
    , oi.products_name As itemtitle 
    , Group_Concat(Concat(patt.products_options_id, '-', patt.products_options_values_id)) As optioncodes 
    , Group_Concat(Concat(patt.products_options, ': ', patt.products_options_values)) As optionnames 
From orders_products oi 
    Join orders o 
     On o.orders_id = oi.orders_id 
    Left Join orders_products_attributes patt 
     On patt.orders_products_id = oi.orders_products_id 
      And patt.orders_id = oi.orders_id 
Where o.orders_status =2 
    And oi.orders_id =10346 
Group By oi.orders_id, oi.products_id 
    , oi.product_quantity, oi.final_price, oi.products_name 
Order By itemnumber 
+0

非常感谢@Thomas - 这既解决了我的问题,又帮助我学习。非常感激。 – Andrew 2011-05-09 19:04:21

0

你应该能够使用GROUP_CONCAT像你说的,但为了做到这一点,你也必须GROUP BY ItemNumber