我无法想象我是第一个或最后一个问这个,但我无法通过搜索找到答案。
我在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
提前致谢!