循环通过MySQL结果循环

时间:2013-02-04 23:01:47

标签: php mysql

我正在尝试使用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

2 个答案:

答案 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普通表格相信我它将帮助您实现理想的结果,并为更复杂的查询提供灵活性。