Sql 如何统计在Woocommerce中处于挂起状态的产品的订单?
我正在尝试制作一个统计脚本,它可以清楚地使用Woocommerce的产品预订、diplaying available、reserved和Seld status。状态命令可在后端管理面板,但我需要使计数和前端可见 例如: 产品名称 可供选择的项目:10个 已预订的项目(但尚未付款):X 售出货品:Y 目前,woocommerce有一个显示每种产品的销售数量的功能,但它同时计算保留(待定状态)和已销售(已完成),因此它是不同类型的计数 我写了一个查询,应该可以找到与挂起状态匹配的订单(wp\u term\u relationships.term\u taxonomy\u id=46),但我不能只选择一个特定的产品,因为它统计数据库中所有挂起的订单。wp_posts.ID和wp_woocmerce_order_itemmeta.meta_value=250的产品ID相同 请注意,产品和订单在同一个表中:wp\u posts 我的问题是:Sql 如何统计在Woocommerce中处于挂起状态的产品的订单?,sql,wordpress,woocommerce,count,orders,Sql,Wordpress,Woocommerce,Count,Orders,我正在尝试制作一个统计脚本,它可以清楚地使用Woocommerce的产品预订、diplaying available、reserved和Seld status。状态命令可在后端管理面板,但我需要使计数和前端可见 例如: 产品名称 可供选择的项目:10个 已预订的项目(但尚未付款):X 售出货品:Y 目前,woocommerce有一个显示每种产品的销售数量的功能,但它同时计算保留(待定状态)和已销售(已完成),因此它是不同类型的计数 我写了一个查询,应该可以找到与挂起状态匹配的订单(wp\u te
SELECT COUNT(DISTINCT wp_posts.ID)
FROM wp_posts, wp_postmeta, wp_term_relationships, wp_woocommerce_order_itemmeta oi
WHERE wp_posts.ID = wp_postmeta.post_id
AND wp_posts.post_status = 'publish'
AND wp_posts.ID = wp_postmeta.post_id
AND oi.meta_key = '_product_id'
AND oi.meta_value = 250
AND wp_posts.post_type = 'shop_order'
AND wp_term_relationships.object_id = wp_posts.ID
AND wp_term_relationships.term_taxonomy_id = 46
你知道如何为这一款产品选择count吗?我觉得我只需要多一个文件管理器,但无法找出缺少了什么。提前感谢。看看下面的内容,试一试。它可能需要一些调整 更新: 我找到了解决办法 正如我所怀疑的那样,我还需要再过滤一张表,这就完成了整个过程 因此缺少了一行:ii.order\u id=wp\u posts.id,以及其他一些调整;) 请确保不要选择“shop_order”post类型,因为它会给出错误的结果:),并且请注意,由于woocommerce对已完成、已删除、已支付和已取消的订单具有不同的状态值,因此完成状态可能没有更多的值 我希望这会对其他人有所帮助:)
非常感谢Kiril引导我找到这个解决方案!您是否尝试根据产品id进行计数?
选择id,计数(*)从………..group by id
我尝试过,但仍然给出了错误的行计数,结果实际上是相同的,添加了带计数的列,但我不知道这里计数的是什么。我猜想元过滤器(键、值)有问题,但这些似乎是正确的,但不起作用,这很奇怪。只是编辑了您的答案并粘贴了您建议的查询。一个简单的问题,您是否在wp_term_relationships
中有一个包含ORDER id
信息的字段?我已经尽可能多地复制了您的示例,并且得到了正确的计数。您在wp\u term\u关系中,要计算order\u id
而不是productID
,有一个主键对象id,它也是wp\u帖子中的订单id,还有一个共享键术语分类id,它指示订单的当前状态。所有表都是默认的woocommerce和wordpress表,没有自定义表e clear:“order_id”实际上是wp_posts中的id键,同一个键表示产品和订单,它们只是不同的行(在我们的示例中,id=250是产品行),然后在where子句中使用wp_posts.id=oi.meta_id
,并指定Count(*)
。
SELECT COUNT(*)
FROM wp_posts, wp_postmeta, wp_term_relationships, wp_woocommerce_order_itemmeta oi
WHERE wp_posts.ID = wp_postmeta.post_id
AND wp_posts.post_status = 'publish'
AND wp_posts.ID = wp_postmeta.post_id
AND wp_posts.ID= oi.meta_id
AND oi.metakey = '_product_id'
AND oi.metavalue = 250
AND wp_posts.post_type = 'shop_order'
AND wp_term_relationships.object_id = wp_posts.ID
AND wp_term_relationships.term_taxonomy_id = 46
SELECT COUNT(DISTINCT wp_posts.ID)
FROM wp_posts, wp_postmeta, wp_term_relationships, wp_woocommerce_order_itemmeta oi, wp_woocommerce_order_items ii
WHERE wp_term_relationships.term_taxonomy_id = (xx - order status id)
AND wp_term_relationships.object_id = wp_posts.ID
AND oi.order_item_id = ii.order_item_id
AND oi.meta_key = '_product_id'
AND oi.meta_value = (yy - specific product id, the same id as in wp_posts)
AND ii.order_id = wp_posts.ID
AND wp_postmeta.post_id = wp_term_relationships.object_id
AND wp_posts.post_status = 'publish'