sql >> データベース >  >> RDS >> Mysql

Woocommerceは製品ごとの総小売売上高をエコーし​​ます

    WooCommerce 2.2ダッシュボードウィジェットは、次のコードを使用して、過去1か月間の小売売上高を計算しています。

        // Sales
        $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' ";
        $query['where']  .= "AND posts.post_date >= '" . date( 'Y-m-01', current_time( 'timestamp' ) ) . "' ";
        $query['where']  .= "AND posts.post_date <= '" . date( 'Y-m-d H:i:s', current_time( 'timestamp' ) ) . "' ";
    
        $sales = $wpdb->get_var( implode( ' ', apply_filters( 'woocommerce_dashboard_status_widget_sales_query', $query ) ) );
    

    その後、:

    で表示します
    wc_price( $sales );
    

    $query['where']の最後の2行で日付が制限されているため 文字列、すべての時間の総売上高を取得したい場合は、それらを削除できると思います。

        // 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 ) );
    

    これはかなり集中的なクエリだと思います。そのため、常に実行される場合は、トランジェントを調査することをお勧めします。

    SQLが苦手なので、個々の製品に合わせて変更するかどうかはわかりませんが、製品のIDを指定するための「where」文字列を取得しようとしています。

        // All-time Sales for specific product, maybe
        $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 ) );
    



    1. SalesOrderGridフィールドでの列エイリアスの使用

    2. SQLのSUBSTRINGコマンド:入門書

    3. oraclePLSQLインタビューの質問

    4. 可用性グループ接続の構成