2014-09-29 80 views
0

我已经问了这个问题here并得到了部分正常的答案。但要回顾一下我以前的问题。我在查询后查询woocommerce产品,然后将它们显示在排行榜的列表中。我还需要显示每种产品的个人零售额。当我说零售额时,我不是指销售数量,而是销售的总金额。我现在有了工作代码,可以让整个商店的总零售量达到,这非常棒。Woocommerce显示每件产品的总零售额

// All-time Sales for entire store 
$query   = array(); 
$query['fields'] = "SELECT SUM(postmeta.meta_value) FROM {$wpdb->posts} as posts"; 
$query['join'] = "INNER JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id "; 
$query['where'] = "WHERE posts.post_type IN ('" . implode("','", wc_get_order_types('reports')) . "') "; 
$query['where'] .= "AND posts.post_status IN ('wc-" . implode("','wc-", apply_filters('woocommerce_reports_order_statuses', array('completed', 'processing', 'on-hold'))) . "') "; 
$query['where'] .= "AND postmeta.meta_key = '_order_total' "; 

$sales = $wpdb->get_var(implode(' ', $query)); 

现在的问题是,我似乎无法得到这个工作的个别产品。目前我有这样的代码:

$product_id = 10; 
$query   = array(); 
$query['fields'] = "SELECT SUM(postmeta.meta_value) FROM {$wpdb->posts} as posts"; 
$query['join'] = "INNER JOIN {$wpdb->postmeta} AS postmeta ON posts.ID = postmeta.post_id "; 
$query['where'] = sprintf("WHERE posts.ID = %n", $product_id); 
$query['where'] .= "AND posts.post_status IN ('wc-" . implode("','wc-", apply_filters('woocommerce_reports_order_statuses', array('completed', 'processing', 'on-hold'))) . "') "; 
$query['where'] .= "AND postmeta.meta_key = '_order_total' "; 

$sales = $wpdb->get_var(implode(' ', $query)); 

但不幸的是,它只显示0。有没有人可以帮助A.修复单个产品的代码,或者B.找到一种更好的方法在产品到产品的基础上实现这一点?

谢谢你对这个问题的任何帮助。

+0

我一直在为此而疯狂。有没有人有任何想法呢? – 2014-10-01 19:07:54

+0

检查错误日志。得到这个错误。 – 2014-10-01 19:42:10

+0

mod_fcgid:stderr:WordPress数据库错误您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在第1行'AND posts.post_status IN('wc-completed','wc-processing','wc-on-hold')AND pos'附近使用正确的语法对于查询SELECT SUM(postmeta.meta_value)FROM wp_posts as posts INNER JOIN wp_postmeta AS postmeta ON posts.ID = postmeta.post_id WHERE posts.ID = AND posts.post_status IN('wc-completed','wc-processing',' )和postmeta.meta_key ='_order_total' – 2014-10-01 19:42:30

回答

0

我想知道如何做到这一点,这就是我想出的。

SELECT SUM(order_item_meta__line_total.meta_value) as order_item_amount FROM wp_posts AS posts INNER JOIN wp_woocommerce_order_items AS order_items ON posts.ID = order_items.order_id INNER JOIN wp_woocommerce_order_itemmeta AS order_item_meta__line_total ON (order_items.order_item_id = order_item_meta__line_total.order_item_id) AND (order_item_meta__line_total.meta_key = '_line_total') INNER JOIN wp_woocommerce_order_itemmeta AS order_item_meta__product_id_array ON order_items.order_item_id = order_item_meta__product_id_array.order_item_id WHERE posts.post_type IN ('shop_order','shop_order_refund') AND posts.post_status IN ('wc-completed','wc-processing','wc-on-hold') AND ((order_item_meta__product_id_array.meta_key IN ('_product_id','_variation_id') AND order_item_meta__product_id_array.meta_value IN ('".$product_id."'))) 

您可能需要像上面那样将此查询构造为数组。