我有购物车,需要以表格格式列出订单。每个订单中都可以包含多个产品,每个产品可能有多个选项(这些是书籍类型的产品,您可以选择不同的封面颜色(不收取额外费用),或者在其上压印您的名字(需要额外付费)< / p>
到目前为止我所拥有的是
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并在一行中列出产品代码(重复的产品代码表示订购了不同的选项)
我现在需要的是产品所包含的选项结果如下:
58 21.98 SKU-12 (Color: Red, 0.00 - Printname 0.00) / SKU-12 (Color: Blue, 0.00 - Printname 4.95)
只是第一个订单显示SKU-12订购两次,一次是红色,一次是蓝色,名称打印为4.95美元
我花了一天时间通过/ group_concat和子查询尝试额外的组,但我甚至没有接近解决方案,所以任何帮助都会很棒。 凯文
答案 0 :(得分:1)
您可能希望在SELECT子句中使用两个相关的子查询。我想以下内容适合您:
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