我有一个查询,该查询请求一个ID(PK)和一个订单号并将它们放入一个数组中。然后,我遍历数组中返回的数据并运行另外两个查询,以查找订单号在数据库中显示的次数,并获取属于该订单号的发票号。我在此设置中看到的问题是返回编译的数据数组需要花费一些时间(大约9秒)。有没有更快的方法来获取我正在寻找的返回结果?
我试图在线找到一些文章,并且遇到mysqli_multi_query。这是进行多个查询以收集我要获取的数据类型的更好方法吗?
<?php
require 'config.php';
$sql = "SELECT id,internal_order_number FROM orders GROUP BY internal_order_number ORDER BY created_date desc LIMIT 0 ,50";
$query=mysqli_query($mysqli, $sql);
if (!$query) {
throw new Exception(mysqli_error($mysqli)."[ $sql]");
}
$data = array();
while( $row=mysqli_fetch_array($query) ) { // preparing an array
$nestedData=array();
$nestedData['line_id'] = $row["id"];
$nestedData['internal_order_number'] = $row["internal_order_number"];
$data[] = $nestedData;
}
$compiled_data = array();
// Loop through data array with additional queries
foreach($data as $line){
$new_data = array();
// Get item counts
$item_counts = array();
$get_count = " SELECT internal_order_number FROM orders WHERE internal_order_number = '".$line['internal_order_number']."' ";
$count_query=mysqli_query($mysqli, $get_count);
while ($counts=mysqli_fetch_array($count_query)){
if (isset($item_counts[$counts['internal_order_number']])) {
$item_counts[$counts['internal_order_number']]++;
} else {
$item_counts[$counts['internal_order_number']] = 1;
}
}
$product_count = $item_counts[$line['internal_order_number']];
// Get invoice numbers
$invoice_array = array();
$get_invoices = " SELECT invoice_number FROM orders WHERE internal_order_number = '".$line['internal_order_number']."'";
$invoice_query=mysqli_query($mysqli, $get_invoices);
while ($invoice=mysqli_fetch_array($invoice_query)){
if(!in_array($invoice['invoice_number'], $invoice_array)){
$invoice_array[] = $invoice['invoice_number'];
}
}
$invoices = implode(", ",$invoice_array);
$new_data['order_number'] = $line['internal_order_number'];
$new_data['count'] = $product_count;
$new_data['invoices'] = $invoices;
$compiled_data[] = $new_data;
}
mysqli_close($mysqli);
print_r($compiled_data);
?>
答案 0 :(得分:0)
什么,为什么您要进行3次基本相同的查询。您第一个选择了所有商品,第二个查询需要相同的表格,请确保第一个表格的订单号==表格的订单号,最后一个只是获取发票号...?
只需执行一个查询:
SELECT internal_order_number, invoice_number FROM table WHERE ...
然后遍历它并执行您需要的操作。您不需要3个查询...