0

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

ボブの注文を次の形式で出力したい:

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
4

2 に答える 2

1

私は単一のクエリを実行します - 顧客がボブである場所をすべて選択し、注文番号で注文します。

次に、結果を反復処理して sku を出力します。

反復で新しい注文番号が表示されるたびに、フォーマットを出力して新しい注文を開始します (日付、注文番号などのすべてのメタデータをエコーし​​ます)。

擬似コードは次のとおりです。

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])
}
于 2013-02-04T23:10:00.513 に答える
0

テーブルには正規化と呼ばれるものが必要です。たとえば、テーブルは冗長で、bob に関する情報を 5回提供し、そのうち2回は「sku」cccであり、2回はbbbと言っています。パフォーマンスを向上させるには、テーブルを分割して正規化する必要があります。最初の3 つの正規形を読むと、目的の結果を達成するのに役立ち、より複雑なクエリに柔軟性が開かれると信じています。

于 2013-02-04T23:12:05.803 に答える