0

我需要从 88k 行表中获取一些统计信息。

每行代表一个参考号,这些参考号与系统中的订单相关联。一份订单可以有多个参考编号。

现在我想存档以找出一些总数,有多少声称的参考编号,以及有多少取消的参考编号 - 并分组并列出每个交易的总数。

这就是我所做的:(OBS. Kohana Query Builder 用于查询,但我认为您可以弄清楚真正的 MySQL 查询是什么样的。您可以在纯 MySQL 查询中回答)

    $refs = DB::select('refnumbers.cancelled', 'refnumbers.is_claimed', 'deals.price', 'deals.ID', 'refnumbers.order_id')
    ->from('refnumbers')
    ->join('deals')->on('deals.ID', '=', 'refnumbers.deal_id')
    ->execute()
    ->as_array();

    $total_cancelled = array();
    $total_claimed = array();

    foreach($refs as $ref)
    {
        $isProduct = DB::select('product_id')->from('orders_chosenoptions')->where('order_id', '=', $ref['order_id'])->execute()->get('product_id', 0);

        if($isProduct > 0)
        {
            $price = DB::select('price')->from('deals_products')->where('id', '=', $isProduct)
            ->execute()->get('price', $ref['price']);

        }else{
            $price = $ref['price'];
        }

        if($ref['cancelled'] == 1)
        {
            $total_cancelled[$ref['ID']] += $price;
        }else if($ref['is_claimed'] == 1)
        {
            $total_claimed[$ref['ID']] += $price;
        }
    }

我相信所有这些代码都可以用查询代替吗?如果取消 = 1(我不知道如何在纯 mysql 中执行此操作),可能会有一些 SUM(deals.price),对于 is_claimed 也是如此。

还有一个“问题”,即我们不能信任交易。如果用户购买的交易是产品交易并且交易内部有不同的价格,那么我们需要像你一样从交易产品中获取价格可以看到。

是否可以在一个查询中完成所有操作?如果没有,如何优化这个 php 代码?

由于这些 88k 行的代码将永远占用并且可能超时(即使超时设置很高),我寻求这样的解决方案。

谢谢

4

0 回答 0