【发布时间】:2018-06-26 04:51:16
【问题描述】:
我正在使用 WooCommerce 创建一个自定义报告,它正在运行,但它使用了大量资源,而且它需要更大,如果我增加它的大小,它会超时。我确信有更好的方法来做到这一点。
我正在运行多个查询以查看已订购了多少特定颜色和尺寸的产品。目前,这些是单独的查询,效率不高。这是我的代码:
这是获取订购数量的函数:
function get_order_by_product_id($product_id, $product_color, $product_size) {
$args = array (
'limit' => '-1',
'status' => 'processing',
);
$orders = wc_get_orders( $args );
if($orders) :
$total = 0;
foreach( $orders as $order) :
$order_id = $order->get_id();
$single_order = wc_get_order( $order_id );
foreach ($single_order->get_items() as $item_id => $item_data) :
$product = $item_data->get_product();
$productID = $single_order->get_item_meta($item_id, '_product_id', true);
$product_name = $product->get_name();
$color = $single_order->get_item_meta($item_id, 'pa_colors', true);
$size = $single_order->get_item_meta($item_id, 'pa_sizes', true);
$item_quantity = $item_data->get_quantity();
if($productID == $product_id && $color == $product_color && $size == $product_size ) :
$total += $item_quantity;
endif;
endforeach;
endforeach;
echo $total;
endif;
}
这是对函数的调用:
get_order_by_product_id(47652, 'black', 'xs');
目前,为了完成这项工作,我为每个产品 ID、颜色和尺寸一遍又一遍地调用该函数。正如我所说,它可以工作,但需要消耗大量资源。
任何提高效率的想法都将不胜感激!
【问题讨论】:
-
您可能会编写一个 SQL 查询来获取您需要的信息,我建议您进入 MySQL 客户端(HeidiSQL、MySQL Workbench)并尝试一下。没有看到您的数据库结构,这里没有足够的信息来帮助您。
-
您的意思是不使用内置的 WooCommerce 查询,而是执行 SQL 查询?
-
是的,您正在寻求优化多个复杂查询,唯一的方法是绕过抽象并直接进行优化查询,利用数据库来完成它的设计目的。由于循环,您的代码不仅速度慢,而且要求数据库一遍又一遍地返回数据,增加网络负载、MySQL 解析器负载等。
标签: php mysql sql wordpress woocommerce