SQL 根据客户 ID 查询 Woocommerce 订单

SQL query for a Woocommerce orders based on Customer ID

如何对以下内容执行 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"

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

已更新

您可以使用来自客户 ID 动态变量的以下(WPDB class 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'
");