php - 如何在 MYSQL 中计算 WordPress order_itemmeta 的产品 _qty 的 SUM()
问题描述
我有如此复杂的 MySQL 查询:
SELECT im.order_item_id, im.meta_key, im.meta_value
FROM `wp_woocommerce_order_itemmeta` AS im
JOIN `wp_woocommerce_order_items` AS oi
ON oi.order_item_id = im.order_item_id
JOIN `wp_posts` AS p
ON p.ID = oi.order_id
WHERE oi.order_id IN (
SELECT DISTINCT order_id
FROM wp_tss_orders_history
WHERE created BETWEEN 1477880000 AND 1689198400
)
AND im.meta_key IN ("_product_id", "_qty")
AND p.post_status <> "trash"
AND oi.order_item_type = "line_item"
ORDER BY im.order_item_id ASC
返回这样的结果:
有什么方法可以修改我的查询 (GROUP BY + SUM()) 以获得这种格式的结果:
array(
array('_product_id' => 178, '_qty' => 150),
array('_product_id' => 177, '_qty' => 20),
array('_product_id' => some other ID, '_qty' => Number Of Items Sold),
)
我已经在 PHP 上编写了解决方案:
$result = $wpdb->get_results($query);
$stage1= [];
foreach ($result as $data) {
$stage1[$data->order_item_id][$data->meta_key] = $data->meta_value;
}
$products_count = [];
foreach ($stage1 as $info) {
$products_count[$info['_product_id']] += intval($info['_qty']);
}
此代码返回:
Array (
[178] => 634
[177] => 135
// where key: _product_id => value: sum of _qty for this _product_id
...
)
但是欢迎任何关于 MySQL 解决方案的想法。谢谢!
解决方案
好吧,至少对我来说,在尝试添加一些示例时,所有其他过滤器都可以忽略不计,因为结果示例所需的所有数据都已经在wp_woocommerce_order_itemmeta
. 据我在您的问题中看到的,您希望获取所有订单商品的 product_id 总量。
我还没有对此进行测试,但你需要的可能看起来像这样:
SELECT metamain.meta_value as product_id,
(
SELECT SUM(metasub.meta_value) FROM wp_woocommerce_order_itemmeta as metasub
LEFT JOIN wp_woocommere_order_itemmeta as metajoin
ON metajoin.order_item_id=metasub.order_item_id AND metajoin.meta_key='_product_id'
WHERE metasub.meta_key='_qty' AND metajoin.meta_value=metamain.meta_value
) as qty_sum
FROM wp_woocommerce_order_itemmeta as metamain
WHERE metamain.meta_key='_product_id' GROUP BY metamain.meta_value;
好吧,就像我写的那样,我还没有测试这个查询,它仍然可以进行很多优化。首先,由于这个巨大的子选择,它需要很长时间才能完成,所以如果你想要更多,不要像这样使用它,然后手动运行它来获得结果。
推荐阅读
- c# - 在 Visual Studio 中增加构建版本号
- sql - 基于 IF 和组合的 SQL SELECT 行
- c# - 使用 Gembox.Document 的 azure 函数中的“无法加载文件或程序集‘PresentationCore’”错误
- logging - Magento 2 - 相同的登录,模态身份验证显示
- cypress - Cypress - 如何在 Cypress 中进行投票?
- c# - 用除括号外的子字符串拆分字符串
- python - 如何在不使用 generate 函数的情况下编写自定义工厂属性
- flutter - Flutter 应用程序在检索 API 时加载
- laravel - 使用 Laravel Socialite 用户返回缺少的授权码
- r - 将现有的 R 包添加到 Anaconda 中的 R 环境