【问题标题】:SQL query for a Woocommerce orders based on Customer ID基于客户 ID 的 Woocommerce 订单 SQL 查询
【发布时间】:2019-12-20 04:42:47
【问题描述】:

如何执行以下 SQL 查询?

  $args = array(
    'customer_id' => $customer_id,
    'status' => 'completed',
    'limit' => 1,
  );
  $orderslast = wc_get_orders( $args );

这是我得到的错误:

2019/08/14 09:08:03 [error] 11#11: *19 FastCGI sent in stderr: "' at line 7 for query 
          SELECT p.ID FROM wp_posts p
          INNER JOIN wp_postmeta pm ON p.ID = pm.post_id
          WHERE p.post_type = 'shop_order'
          AND p.post_status = 'wc-completed'
          AND pm.meta_key = '_customer_user'
          AND pm.meta_value = '16495'
          AND LIMIT 1
       made by require('wp-blog-header.php'), require_once('wp-includes/template-loader.php'), include('/var/www/app/app/sib-cancelled.php')
PHP message: PHP Warning:  fputcsv() expects at least 2 parameters, 1 given in /var/www/app/app/sib-cancelled.php on line 167" while reading response header from upstream, client: 172.18.0.1, server: , request: "GET /sib-cancelled/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost:4646"

【问题讨论】:

    标签: php sql wordpress woocommerce orders


    【解决方案1】:

    更新

    您可以从客户 ID 动态变量中使用以下(WPDB 类 SQL 查询):

    global $wpdb;
    
    $order_ids = $wpdb->get_col( "
        SELECT p.ID FROM {$wpdb->prefix}posts p
        INNER JOIN {$wpdb->prefix}postmeta pm ON p.ID = pm.post_id
        WHERE p.post_type = 'shop_order'
        AND p.post_status = 'wc-completed'
        AND pm.meta_key = '_customer_user'
        AND pm.meta_value = '$customer_id'
        ORDER BY p.ID DESC LIMIT 1
    ");
    

    您将从客户 ID 中获得一个包含最后一个订单 ID 的数组。


    您也可以使用:

    global $wpdb;
    
    $order_ids = $wpdb->get_col( "
        SELECT MAX(p.ID) FROM {$wpdb->prefix}posts p
        INNER JOIN {$wpdb->prefix}postmeta pm ON p.ID = pm.post_id
        WHERE p.post_type = 'shop_order'
        AND p.post_status = 'wc-completed'
        AND pm.meta_key = '_customer_user'
        AND pm.meta_value = '$customer_id'
    ");
    

    您可以将get_col() 替换为get_var() 以获取值而不是带有值的数组。


    如果您想从电子邮件(客户账单电子邮件)中获取最后一个订单 ID,请使用:

    global $wpdb;
    
    $order_ids = $wpdb->get_col( "
        SELECT MAX(p.ID) FROM {$wpdb->prefix}posts p
        INNER JOIN {$wpdb->prefix}postmeta pm ON p.ID = pm.post_id
        WHERE p.post_type = 'shop_order'
        AND p.post_status = 'wc-completed'
        AND pm.meta_key = '_billing_email'
        AND pm.meta_value = '$billing_email'
    ");
    

    【讨论】:

    • 这很完美,甚至避免了超时问题,因此可以使用替代方法。
    • 只是想得有点远,但您可以通过用户电子邮件地址获取订单吗?
    • 我刚刚意识到这并没有给我任何订单 ID,因此我无法搜索 woocommerce_order_items 以获取他们最后订购的商品。它正在提取正确的用户 ID。
    • 是的,抱歉,目前没有给我订单 ID。我已经尝试通过用户 ID 和电子邮件地址。
    • 它对我不起作用,我得到一个没有订单 ID 的空数组的大列表。我刚刚在问题中留下了一个错误。
    【解决方案2】:

    试试这个:SELECT customer_id FROM yourTableName WHERE status = 'completed' AND limit = 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-08
      • 2013-11-22
      • 2022-01-14
      相关资源
      最近更新 更多