2017-02-09 10 views
0

私は3つのテーブルorders、ordered_dishes、ordered_dish_optionsを持っています。mysqlの1対2の多数のテーブルへの参加

  • Ordersテーブルが

  • など、顧客名、住所などの注文情報が含まれているordered_dishesテーブルORDER_IDとdish_idとすべての注文 ordered_dish_idのためのユニークな が含まれています。 ordered_dish_idは同じディッシュ+ dish_optionsの異なる組み合わせがある可能性があるためです。この例では、2つの料理がありますとORDER_ID含まれ、ordered_dish_id(ordered_dishes.ordered_dish_idするFK)

  • ordered_dish_optionsを命じているのと同じ組み合わせの量である量は、ノート
  • orders 
    ------ 
    order_id | customer_name 
    1  | John smith 
    
    ordered_dishes 
    -------------- 
    order_id | ordered_dish_id | dish_id | amount 
    1  | 1    | 3  | 1 
    1  | 2    | 3  | 2 
    1  | 3    | 6  | 1 
    
    ordered_dish_options 
    -------------------- 
    order_id | ordered_dish_id | dish_option_id 
    1  | 1    | 2 
    1  | 2    | 4 
    1  | 3    | 3 
    

    をdish_option_id dish_id = 3ですが、料理+料理のオプションの組み合わせは異なります。

    私は次のクエリを持っている:

    "SELECT orders.*, 
    GROUP_CONCAT(ordered_dishes.dish_id SEPARATOR ', ') dish_ids, 
    GROUP_CONCAT(ordered_dishes.amount SEPARATOR ', ') dish_amounts, 
    GROUP_CONCAT(ordered_dishes.ordered_dish_id SEPARATOR ', ') dish_odi, 
    GROUP_CONCAT(ordered_dish_options.ordered_dish_id SEPARATOR ', ') do_odi, 
    GROUP_CONCAT(ordered_dish_options.dish_option_id SEPARATOR ', ') dish_option_ids 
    FROM orders 
    LEFT JOIN ordered_dishes ON orders.order_id=ordered_dishes.order_id 
    LEFT JOIN ordered_dish_options ON orders.order_id=ordered_dish_options.order_id 
    WHERE orders.order_id=1" 
    

    このクエリは、私のこれを与える:

    order_id, 
    orderdata, 
    dish_ids='3,3,6,3,3,6,3,3,6', 
    dish_amounts='1,2,1,1,2,1,1,2,1', 
    dish_odi='1,2,3,1,2,3,1,2,3', 
    do_odi='1,1,1,1,1,1,1,1,1' 
    dish_option_id='2' 
    

    私が欲しいのは、すべてのORDER_DATA、dish_id +量+ ordered_dish_id、dish_option_id + ordered_dish_idです。最後の2つのテーブルのordered_dish_idsを使用して、dish_optionを対応するディッシュにリンクします。

    +1

    order_idは重複しています. – Pete

    +0

    いいえ、すべての注文ごとに、ordered_dish_id(odi)が1から増分を開始するため、order1は3つのodi1,2,3で構成されています。オーダー2は、例えば、odi1,2,3,4を有する4つの皿を有する。したがって、ordered_dish_optionsが結合されているときはorder_idで結合し、ordered_dishから対応するodiにリンクする必要があります – user4309314

    +0

    独自の方法がありますか – Pete

    答えて

    0

    は、私は最終的に期待される結果となったクエリ:。 SELECT受注*、ordered_dishes.dishidsは、ordered_dishes.amountsは、ordered_dish_options.odosは、ordered_dish_options.dois注文LEFT JOINを FROM (、ORDER_ID SELECT GROUP_CONCAT(ordered_dishes。 dish_id)dishids、 GROUP_CONCAT(ordered_dishes.amount)はorders.order_id = ordered_dishes.order_id LEFT ORDER_ID SELECT(JOIN、 GROUP_CONCAT(ordered_dish_options.ordered_dish_id)オドス、 GROUP_CONCAT(ordered_d ON GROUP ordered_dishes)ORDER_ID BY ordered_dishesから 量ish_options.dish_option_id)orders.order_id = ordered_dish_options.order_id ON GROUP ordered_dish_options)ORDER_ID BY ordered_dish_options FROM のDOI WHERE orders.order_id = 6ので、エディタは、iは符号フォーマットにクエリを取得couldntの少し安っぽいある

    4つのスペースで。

    関連する問題