2014-09-29 50 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."'))) 

您可能需要像上面那樣將此查詢構造爲數組。

相關問題