0

ショッピングカートを持っているので、注文を表形式でリストする必要があります。各注文には複数の製品を含めることができ、各製品にはいくつかのオプションがあります(これらは本の種類の製品であり、さまざまなカバーの色を選択するか(追加料金なし)、名前をエンボス加工することができます(追加料金あり)

ERD

私が今まで持っているのは

    select 
order_id,
sum(price_paid * ordered_qty),
group_concat(product_code SEPARATOR ' / ') 
from
orders join  order_lines USING (order_id)
where
DATE_FORMAT(order_date, '%Y%m') >= '201203' and DATE_FORMAT(order_date, '%Y%m') <= '201203' and order_status = 'SHIPPED' and item_status = 'LINESHIPPED'
group by order_id 
order by order_id 

これはオプション(order_line_optionsテーブル)を無視し、これを返します:

58  21.98   SKU-12 / SKU-12
59  10.99   SKU-12
60  67.78   SKU-31 / SKU-12 / SKU-56
61  259.45  SKU-98 / SKU-06 / SKU-98
62  9.49    SKU-40 / SKU-36

これは、単価* QTYを正しく合計し、製品コードを1行にリストします(製品コードが重複している場合は、注文されたさまざまなオプションを示します)

私が今必要としているのは、製品に含まれるオプションが次のような結果になることです。

58  21.98   SKU-12 (Color: Red, 0.00 - Printname 0.00) / SKU-12  (Color: Blue, 0.00 - Printname 4.95)

SKU-12で表示される最初の注文は、2回注文されました。1回は赤で、もう1回は青で、名前は$4.95で印刷されています。

/ group_concatとサブクエリによって追加のgroupを試して一日を過ごしましたが、解決策に近づいていないので、どんな助けも素晴らしいでしょう。ケビン

4

1 に答える 1

1

SELECT句で2つの相関サブクエリを使用することをお勧めします。私は次のことがあなたのために働くはずだと思います:

select 
order_id,
sum( price_paid 
     * ordered_qty 
     -- add the cost of any subitems for this line
     + IFNULL((select sum(option_cost) 
          from order_line_options olo
         where olo.order_line_id = order_lines.order_line_id),0)
),
--Here product_code
group_concat(
  CONCAT(product_code, 
  ' (', 
  (select group_concat(
          CONCAT(option_name, ': ',
                 option_value, ', '
                 option_cost
                 )
          SEPARATOR '-'
          )
     from order_line_options olo
    where olo.order_line_id = order_lines.order_line_id
    group by olo.order_line_id
   ),
   ')'
  ) -- end of CONCAT() which creates subitem list
  SEPARATOR ' / '
) 
from
orders join  order_lines USING (order_id)
where
  DATE_FORMAT(order_date, '%Y%m') >= '201203' and DATE_FORMAT(order_date, '%Y%m') <=   '201203' and order_status = 'SHIPPED' and item_status = 'LINESHIPPED'
group by order_id 
order by order_id 
于 2012-07-31T18:44:05.507 に答える