我正在尝试使用PHP显示按订单号分组的单个客户订单的详细信息。我可以通过运行单独的查询来做到这一点,但这似乎并不高效。有人可以用最有效的方式帮助我吗?请参阅以下示例:
我有一个具有以下结构的“订单”MySQL表:
|ordernumber|customer|quantity|sku|product |orderdate
-----------------------------------------------------
|1 |bob |2 |aaa|producta|2012-08-30
|1 |bob |1 |bbb|productb|2012-08-30
|1 |bob |4 |ccc|productc|2012-08-30
|2 |jim |10 |aaa|producta|2012-08-30
|2 |jim |1 |ccc|productc|2012-08-30
|3 |bob |1 |bbb|productb|2012-12-15
|3 |bob |4 |ccc|productc|2012-12-15
我想以这种格式输出Bob的订单:
Customer: Bob
Order ID: 1
Order Date: 2012-08-30
Details: *Qty* *Sku* *Product*
2 aaa producta
1 bbb productb
4 ccc productc
____________________________________________________
Customer: Bob
Order ID: 3
Order Date: 2012-12-15
Details: *Qty* *Sku* *Product*
1 bbb productb
4 ccc productc
答案 0 :(得分:1)
我会运行一个查询 - 选择所有客户都是bob并按订单编号排序。
然后我会简单地遍历结果并打印skus。
每当我在迭代中看到一个新的订单号时,我会打印格式以启动一个新订单(并回显所有的元数据,如date,ordernumber等)
这是伪代码:
rows = run_sql(select * where customer = bob order by ordernumber asc)
curr_order_id = 0
foreach (row in rows)
{
if (row[order_id] != curr_order_id)
{
curr_order_id = row[order_id]
print(-----------------------)
print(customer : row[customer])
print(order : row[order_id])
print(order date: row[order_date])
print(details: *qty* *sku* *product*)
}
print( row[qty] row[sku] row[product])
}
答案 1 :(得分:0)
您的桌子需要一些名为规范化的内容。 例如,您的表格是多余的,这样您就可以提供有关 bob 5 次的信息,而 2 次表示您的“sku” ccc 且 2 次说 bbb 。您需要拆分表并对其进行规范化以获得更好的性能。阅读第一个 3普通表格相信我它将帮助您实现理想的结果,并为更复杂的查询提供灵活性。