[英]Adjust sql query to get count with group_concat
我有以下查询,其中列出了订单以及订购的商品。
select
`orders`.*,
DATE_FORMAT(orders.created_at, '%d.%m.%Y %h:%i%p') as date,
`oi`.`items`
from `orders`
inner join
(
select
order_id,
count(item_name) as count,
group_concat(item_name SEPARATOR ",") as items
from orders_items
group by order_id
)
as oi on `oi`.`order_id` = `orders`.`id`
我的表设置如下:
命令
id
1
2
3
orders_items
id order_id item_name
1 1 Class Voucher
2 1 Class Voucher
3 1 Class Voucher
4 1 The Cook Book
在当前查询中,当我输出它时, items
列看起来像这样:
Class Voucher,Class Voucher,Class Voucher,The Cook Book
如何更改它,以便每个项目旁边都有一个计数,而不是列出每个项目的名称。 因此,我希望items
包含以下内容:
3 x Class Voucher
1 x The Cook Book
提前致谢。
您可以分两个步骤到达那里:首先对项目进行计数,然后按订单获取所有项目及其计数:
select
orders.*,
DATE_FORMAT(orders.created_at, '%d.%m.%Y %h:%i%p') as date,
oi.items
from orders
inner join
(
select order_id, group_concat(concat(cnt, ' x ', item_name)) as items
from
(
select order_id, item_name, count(*) as cnt
from orders_items
group by order_id, item_name
) as counted
group by order_id
) as oi on oi.order_id = orders.id;
除了上述查询之外:
select orders.*, DATE_FORMAT(orders.created_at, '%d.%m.%Y
%h:%i%p') as date, oi.items from orders inner join ( select
order_id, group_concat(concat(cnt, ' x ', item_name)) as items
from (
select order_id, item_name, count(*) as cnt
from orders_items
group by order_id, item_name ) as counted group by order_id ) as oi on oi.order_id = orders.id;
我会加一个
Having Count(*)>0
消除数量为0的任何物品
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.