0

OK私は3つのテーブルを持っています.1つは製品を含み、1つは注文を含み、テーブルを注文IDと製品IDと結合して製品を注文に関連付けます。

しかし、すべての注文と各注文内のアイテムを選択して返すクエリをどのように設定すればよいでしょうか。したがって、各行に order_items という列があります。

これまでのところ、私は持っています:

SELECT
  intOrderID AS Order_ID, 
  strPaymentMethod AS Payment_Method,
  strPaymentRef, AS Payment_Ref, 
  strPaymentStatus AS Payment_Status,
  dtmDate AS Date, 
  curPaymentAmount AS Net_Price, 
  curShippingFee AS Shipping_Fee 
FROM tbl_mod_ShopOrders

他のテーブルはtbl_mod_ShopOrderItems、選択する必要があります

intProductID
strProductTitle
curPrice
intQty 

注文内の各アイテム。

ある種のサブクエリを実行する必要があることはわかっていますが、その作成方法に注意してください。

4

2 に答える 2

0

PRODUCTテーブルがでORDER、結合テーブルPRODUCTORDERにキーproduct_idとがあると仮定するとorder_id、次のことができます。

SELECT o.id, GROUP_CONCAT(po.product_id) AS products_list
FROM PRODUCT p, PRODUCTORDER po
WHERE o.id = po.order_id
GROUP BY o.id
ORDER BY o.id

集計関数としてGROUP_CONCATを使用します。上記の結果は、たとえば次のようになります。

id | products_list
---|--------------
01 | 1,4,9
02 | 2,4,6
03 | 5
04 | 3,5

idオーダー ID です。

于 2012-04-20T09:27:00.297 に答える
0

各注文には複数のアイテムがあります。つまり、注文を選択すると、各行に 1 つ以上のアイテムが含まれる可能性があります。

各注文のアイテム数などの単純なものを表示する必要がある場合は、1 つのクエリですべての情報を簡単に取得できます。

ただし、各注文のアイテムに関する詳細情報 (アイテム、数量、価格など) を表示する必要がある場合は、アイテム情報を取得する 2 番目のクエリを実行する方が簡単です。この 2 番目のクエリは、注文ごとに実行することも、表示されるすべての注文に対して 1 回だけ実行することもできます (表示された注文 ID で配列を作成し、IN句を使用してそれらの ID に属するすべてのアイテムを選択します)。

詳細なシナリオの例:

//$orders = array of orders retrieved by your query

// loop through the orders to collect all ids
$order_ids = array();
foreach($orders as $order) {
    $order_ids[] = $order->Order_ID;
}

// build the select to retrieve all items
$items = array();

// make the select only if there are orders available
if(count($order_ids) > 0) {
      $q = "SELECT * from tbl_mod_ShopOrderItems WHERE order_id IN (" . implode(',', $order_ids) . ") ";
       // ...
       // assign result to $items
}

後で注文を表示するときに、 をループして、現在の注文と一致する$itemsかどうかを確認できます。order_idorder

foreach($orders as $order) {
    // ...
    // display order info

    // display order items
    foreach($items as $item) {
         // if the item belongs to the current order
         if($item->order_id == $order->order_id) {
             // ...
             // display the current item
         }
    }
}
于 2012-04-20T09:35:16.440 に答える