【发布时间】:2016-04-10 03:34:18
【问题描述】:
我有 2 个(mysql)表:
orders:
order_number
deliveries:
id, order_number, status
订单可以在交货表中有多个交货。现在我查询 50 个订单,然后循环它们 (php) 并查询交付表中 order_number = orders.order_number 的交付并合并数组。
理想情况下,这是一个查询,而不是 51 个。我尝试了 100 种连接和组的组合,但无法破解这个看似简单的查询。结果应该是:
[orders] => Array
(
[0] => Array
(
[order_number] => 16021322220558
[deliveries] => Array
(
[0] => Array
(
[id] => 13332
[order_number] => 16021322220558
[status] => delivering
)
[1] => Array
(
[id] => 13333
[order_number] => 16021322220558
[status] => delivering
)
)
)
[1] => Array
(
[order_number] => 16021322220559
[deliveries] => Array
(
[0] => Array
(
[id] => 13334
[order_number] => 16021322220559
[status] => delivering
)
[1] => Array
(
[id] => 13335
[order_number] => 16021322220559
[status] => delivering
)
)
)
...
)
编辑:这就是我最终的结果。 IN 是从 51 个查询减少到 2 个查询的洞察力!
<?php
// Query for the last 50 orders
$q_orders['orders'] = // SELECT * FROM orders LIMIT 50
// Create array of order numbers
foreach($q_orders['orders'] as $order){
$order_numbers[] = $order['order_number'];
}
// Query for all the deliveries
$q_deliveries = // SELECT * FROM deliveries WHERE order_number IN ($order_numbers)
// For each order, append the deliveries with the same order_number
$i = 0;
foreach($q_orders['orders'] as $order){
foreach($q_deliveries as $delivery){
if($delivery['order_number'] == $order['order_number']){
$q_orders['orders'][$i]['deliveries'][] = $delivery;
}
}
$i++;
}
【问题讨论】:
-
堆栈中的大多数人可能会帮助您完成此查询,但我们需要更多关于您的表结构及其关系的信息(主要 order_number 在哪里?在哪里是其余的信息吗?)如果你给我这些信息,我可能会帮助你。 - 如果您使用 phpmyadmin,带有必要表格和关系的图表截图会很棒!
-
@Babydead orders 表包含 order_number,deliveries 表包含 id、order_number 和 status
-
@Babydead 我在问题中添加了这些字段。我目前正在查询订单表以获取包含“主订单号”的所有订单,然后为每个订单查询包含该订单号的每个交货的交货表。
标签: php mysql multidimensional-array