【发布时间】:2021-04-20 12:17:58
【问题描述】:
我被困在这个查询中一段时间,任何类型的帮助都将不胜感激。这是一个使用 woocommerce 的 wordpress 网站。
试图获取客户的购买详细信息,我需要获取一个应包含以下字段的结果集。
Email | First Name | Orders | Items Purchased | Order Total
为此,我编写了以下 SQL。 achg8 是表前缀。一个订单可能有一个或多个项目。
SELECT
pm1.meta_value as email ,
pm2.meta_value as first_name,
sum(pm3.meta_value) as total,
count(posts.ID) as orders ,
count(items.order_item_id) as items
from achg8_posts as posts
left join achg8_postmeta as pm1 on posts.ID = pm1.post_id
left join achg8_postmeta as pm2 on posts.ID = pm2.post_id
left join achg8_postmeta as pm3 on posts.ID = pm3.post_id
left join achg8_woocommerce_order_items as items on items.order_id = posts.ID
WHERE
posts.post_type = 'shop_order' and
posts.post_status = 'wc-processing' and
pm1.meta_key='_billing_email' and
pm2.meta_key='_billing_first_name' and
pm3.meta_key='_order_total'
GROUP by email
问题是订单号和项目号总是相等的。但实际上并非如此。
需要并了解我做错了什么。
更新
根据@matigo 的评论将 sql 编辑为以下内容。现在的问题是订单总数被多次相加。例如,如果一个订单有两个项目(即连接结果集中的两行),订单总数被相加两次。
SELECT
pm1.meta_value as email ,
pm2.meta_value as first_name,
sum(pm3.meta_value) as total,
count(DISTINCT posts.ID) as orders ,
count(items.order_item_id) as items
from achg8_posts as posts
left join achg8_postmeta as pm1 on posts.ID = pm1.post_id
left join achg8_postmeta as pm2 on posts.ID = pm2.post_id
left join achg8_postmeta as pm3 on posts.ID = pm3.post_id
left join achg8_woocommerce_order_items as items on items.order_id = posts.ID
WHERE
posts.post_type = 'shop_order' and
posts.post_status = 'wc-processing' and
pm1.meta_key='_billing_email' and
pm2.meta_key='_billing_first_name' and
pm3.meta_key='_order_total'
GROUP by email
【问题讨论】:
-
您能否展示一下包含在此事务中的表的架构,并提及您希望如何聚合结果集。
-
@DashrathChauhan 你来了,伙计screencast.com/t/TDTIRNo7。我想通过客户电子邮件汇总订单。应该有订单的总价值和购买的商品总数
标签: mysql wordpress join woocommerce