问题:
我需要一种方法来首先使用特定的优惠券代码进行所有销售。然后从所有销售中获得总收入(最好减去这些销售的任何回报。获得实际收入值。)
执行的想法
我正在使用woocommerce 2.6.8和MySql数据库。我的猜测是,我不得不首先计算使用PHP和MySql的特定优惠券的销售数量。然后,对于具有特定优惠券的每个唯一订单ID,请对总和进行新查询。
非常感谢有关PHP和查询的外观的任何建议:)
我应该指出我不想从优惠券中获得折扣的总和。我需要计算特定优惠券(而不是折扣)的总价值。
好的,到目前为止仍然没有可行的解决方案。但这就是我认为它的基本结构。获得总数并不容易,因为优惠券不与订单直接关联。 我认为查询必须符合以下要求:
{TBLPRFX} _woocommerce_order_items
步骤1.获取order_id FOR order_item_name = {COUPON_NAME}
步骤2.获取order_item_id FOR order_item_type = line_item WHERE order_id EQUAL {来自第1步的结果}
| order_item_id | order_item_name | order_item_type | order_id |
| 40971 | {COUPON_NAME} |优惠券| 001
| 40970 |增值税|税| 001
| 40969 | {PRODUCT_NAME} | line_item | 001
-
{TBLPRFX} _woocommerce_order_itemmeta
步骤3. SUM meta_value FROM meta_key = _line_tax AND meta_key = _line_total WHERE order_item_id = {RESULT FROM STEP 2}
| order_item_id | meta_key | meta_value |
| 40969 | _line_tax | {VALUE_TAX}
| 40969 | _line_total | {VALUE_TOTAL}
| 40969 | _product_id | {PRODUCT_ID}
-
我需要的查询帮助搞清楚:)不确定如何在MySql和PHP中提出这个要求。我的想法是将其作为一个foreach,其中" order_item_name = {COUPON_NAME_VARIABLE}",因此我可以总结使用该优惠券的所有销售总额(即不是优惠券折扣值)。
答案 0 :(得分:0)
经过大量测试后,我想出了一个有效的解决方案。它不是最谦虚的,但可以完成工作。
如果有任何SQL-ninjas看到这一点,那么如果您可以建议更精简的查询会很棒:)
在制作完第一个工作解决方案后,我意识到需要检查更多步骤以获得更准确的总数。处理退款,税收,折扣等,并确保我只从已完成的订单中获取数据(因为已取消,暂停,待处理等在完成之前不是销售)。
所以,这就是我最终的结果。就像我说的,我知道它需要一些工作,可能会做得更好。但就目前而言,它确实有效。
修改了FUNCTIONS.PHP代码 -
// COUPON CHECK
function couponcheck() {
global $wpdb;
$gtl = 0; // Grand Total
$total_sales = 0;
$cpn = $_GET['cpn']; // Get coupon name from URL string
$tblprfx = '[YOUR_TABLE_PREFIX]'; // Table prefix
$wpps = 'posts'; // Look for post_status
$wppm = 'postmeta';
$wcoi = 'woocommerce_order_items';
$conversion_value = 1;
$base_currency = '[YOUR_BASE_CURRENCY]';
$currency;
$orders_made;
// Check to make sure there is a couon name in string
if(isset($cpn) && !empty($cpn)){
// Query chain
$init_result = $wpdb->get_results("SELECT order_id FROM {$tblprfx}{$wcoi} WHERE order_item_name='$cpn'");
$orders_made = count($init_result);
foreach($init_result as $ir){
$r1 = $ir->order_id;
$completed_result = $wpdb->get_results( "SELECT ID FROM {$tblprfx}{$wpps} WHERE post_status='wc-completed' AND ID=$r1" );
foreach($completed_result as $post_rows) {
$pr = $post_rows->ID;
$completed_sales += 1;
$currency_result = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_order_currency'" );
foreach($currency_result as $cr) {
$currency = $cr->meta_value;
if($currency === 'EUR'){
$currency = 'EUR';
$currency_rate = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_woocs_order_rate'" ); foreach($currency_rate as $rv) {
$rate_value = $rv->meta_value;
$conversion_value = $rate_value;
}
}
}
$data_result = $wpdb->get_results( "SELECT meta_value FROM {$tblprfx}{$wppm} WHERE post_id=$pr AND meta_key='_order_total'" );
foreach($data_result as $dr) {
$d = $dr->meta_value;
if($currency === 'EUR'){
$eur += $d;
$d = $d/$conversion_value;
}else{
$[YOUR_BASE_CURRENCY] += $d;
}
$gtl += $d;
}
}
}
// Total number of sales
$refunded_orders = $orders_made-$completed_sales;
$order_avg = $gtl/$completed_sales;
echo '<p>Total <strong>completed, non-refunded, sales made (after discounts)</strong> with coupon <strong>' . strtoupper($cpn) . '</strong>: <br />(Number of refunded orders: <strong>' . $refunded_orders . ')</strong></p><h2>' . $completed_sales . '</h2><p>At a total <strong>sales value</strong> of:</p><h2>' . number_format($[YOUR_BASE_CURRENCY],2) . ' [YOUR_BASE_CURRENCY]</h2><h2>€' . number_format($eur,2) . '</h2><p>Adding up to a <strong>sum total</strong> of:</p><h2>' . number_format($gtl,2) . ' [YOUR_BASE_CURRENCY]</h2><p>Creating an average order value of:<br /><strong>' . number_format($order_avg,2) . ' [YOUR_BASE_CURRENCY]</strong>';
}
} add_shortcode('coupons', 'couponcheck');
一个小小的注释是我将实际基础货币更改为[YOUR_BASE_CURRENCY]。欢迎评论(建设性的):)