用于大数据和子/相关数据集的PHP或SQL

时间:2017-02-03 16:47:27

标签: php sql-server performance subquery

我无法想象我是第一个或最后一个问这个,但我无法通过搜索找到答案。

我在SQL Server中有一个大型订单数据集。我需要返回每个订单以及每个订单项和每笔付款。我正在寻找查询和迭代这些数据的最有效方法。我正在使用PHP / MSSQL来获取订单,循环使用foreach并查询项目列表,付款将非常低效。

我考虑创建一个联合来创建一个包含一堆列的大型数据集,其中一列是一个列,指示记录的类型(payment,line_item,order_data)。但这似乎效率也很低。

这是我一直在使用的流程大纲:

<?php
    // query for orders
    $records = sql_function("select * from v_migration_orders");

    $json_output = array();
    foreach($record as $r){
        $data['order']['org_code'] = $r['org_code'];
        $data['order']['po_number'] = $r['po_number'];
        ...

        // query for line items
        $data['order']['line_items'] = array();
        $items = sql_function("select * from v_migration_line_items where invoice = ".sanitize_function($r['invoice']));

        foreach($items as $i){
            $line['line_item_type'] = $i['line_item_type'];
            $line['sku'] = $i['sku'];
            $line['legacy_id'] = $i['legacy_id'];
            ...
            array_push($data['order']['line_items'],$line);
        }

        // query for payments
        $data['order']['payments'] = array();
        $payments = sql_function("select * from v_migration_payments where invoice = ".sanitize_function($r['invoice']));

        foreach($payments as $p){
            $pyt['Amount'] = $p['Amount'];
            $pyt['payment_type'] = $p['payment_type'];
            $pyt['Check_Number'] = $p['Check_Number'];
            ...
            array_push($data['order']['payments'],$pyt);
        }


        array_push($json_output,$data);
    }

    echo json_encode($json_output);

关注效率,我希望社区中的某些人可以帮助我指出正确的方向。从Web服务器到数据库服务器的调用次数是我希望的三倍。我能想到的另一种方法是找到一种方法将它们全部放入数据库中,并让PHP在收到它后解析完整的响应。

以下是我在视图中添加的所需数据的结构。请注意,我使用整数Invoice作为加入的键。

v_migration_orders:

  • line_type(值为:“订单”)
  • Org_Code
  • PO_Number
  • Invoice
  • Tax_Total
  • Order_Total
  • EMAIL
  • status
  • order_t_stamp
  • order_legacy_id

v_migration_orders_line_items:

  • line_type(值为“line_item”)
  • line_item_type
  • Invoice
  • sku
  • legacy_id
  • TITLE
  • quantity
  • unit_price

v_migration_orders_payments:

  • line_type(价值为“付款”)
  • Invoice
  • Amount
  • payment_type
  • Check_Number
  • Card_Processor
  • cc_message
  • card_type
  • cardholder_name
  • card_expiry
  • payment_token
  • payment_t_stamp

提前致谢!

0 个答案:

没有答案