尝试计算正在处理的此在线用户的订单

时间:2019-11-11 17:38:22

标签: mysql join woocommerce

我希望限制每个用户每天只能注册一个订单。

为此,我需要在注册该用户是否具有任何“ wp-processing”订单之前检查每个用户的订单?

我在PHP下方编写了MySQL查询,但这是行不通的。

我打印了'$ sql_count_from_status'的值,并在phpmyadmin的“ SQL”选项卡中尝试查找错误。 变量的值为:

SELECT count(ID) FROM wp_posts p LEFT JOIN wp_postmeta m ON p.ID=m.post_id WHERE p.post_status LIKE 'wc-processing' AND p.post_type LIKE 'shop_order' AND m.meta_key LIKE '_customer_user' AND m.meta_value LIKE '100577';

,结果显示我在phpmyadmin中为零。现在我知道查询有问题,因为我有用户100577的“处理订单”。

function get_orders_count_from_status( $status , $this_user_id){
global $wpdb;

// We add 'wc-' prefix when is missing from order staus
$status = 'wc-' . str_replace('wc-', '', $status);

$sql_count_from_status = "
SELECT count(ID)  FROM {$wpdb->prefix}posts p
LEFT JOIN {$wpdb->prefix}postmeta m
ON p.ID=m.post_id
WHERE p.post_status LIKE '$status' AND p.post_type LIKE 'shop_order'
AND m.meta_key LIKE '_customer_user' 
AND m.meta_value LIKE '".$this_user_id."';";

return $wpdb->get_var($sql_count_from_status);
}

1 个答案:

答案 0 :(得分:1)

这是一个合理查询的示例(尽管依靠LEFT JOIN有点奇怪):

SELECT count(*)  
  FROM {$wpdb->prefix}posts p
  LEFT 
  JOIN {$wpdb->prefix}postmeta m
    ON m.post_id = p.ID   
   AND m.meta_key = '_customer_user' 
   AND m.meta_value = :this_user_id
 WHERE p.post_status LIKE :status
   AND p.post_type = 'shop_order'