1

これを解決するために数日を費やしましたが、成功は限られていました。簡単な答えがあると確信していますが、かなり多くの調査にもかかわらず、これまでのところ運がありません。問題は私の SQL の知識が限られていることです。

私は3つのテーブルを持っています。注文、orders_products、およびorders_products_attributes。

特定の注文の結果テーブルを返し、一致するすべての orders_products を表示し、その製品が存在する場合は orders_products_attributes 行にマージしようとしています (属性がない場合もあります)。

私はここにいる:

SELECT      oi.orders_id AS orderid
,           oi.products_id AS ItemNumber
,           oi.products_quantity AS Quantity
,           oi.final_price AS CostPerUnit
,       oi.products_name AS ItemTitle
,       concat (patt.products_options_id, '-', patt.products_options_values_id) AS OptionCodes
,       concat (patt.products_options, ': ', patt.products_options_values) AS OptionNames
FROM        orders_products oi
JOIN        orders o
ON      o.orders_id = oi.orders_id
LEFT JOIN   orders_products_attributes patt
ON          patt.orders_products_id = oi.orders_products_id AND patt.orders_id = oi.orders_id
WHERE       o.orders_status =2 AND oi.orders_id =10346
ORDER BY    ItemNumber

次の結果が返されます。

orderid ItemNumber Quantity CostPerUnit ItemTitle OptionCodes OptionNames

10346   140        1        319.9982    Item 1    3-5        Choice: A

10346   140        1        319.9982    Item 1    1-1        Choice2: B

10346   210        1        112.5000    Item 5    NULL       NULL

ItemNumber が同じ行をマージしようとしています。最終的に存在する OptionCodes と OptionNames を連結します。

orderid ItemNumber Quantity CostPerUnit ItemTitle OptionCodes OptionNames

10346   140        1        319.9982  Item 1   3-5, 1-1    Choice: A, Choice2: B

10346   210        1        112.5000  Item 5    NULL         NULL

これらを GROUP_CONCAT しようとしましたが、3行すべてをマージすることにしか成功しません。

遅くて申し訳ありませんが、ここから先に進むことができないようです。

アンドリュー・ティア

4

2 に答える 2

0

あなたが言ったように使用できるはずですGROUP_CONCATが、そうするためには、GROUP BY ItemNumber.

于 2011-05-09T16:26:59.600 に答える
0

テーブルの一意のキーでグループ化できorder_productsます。それが何であるかわからなかったので、Group_Concat を使用する列以外の Select 句のすべての列でグループ化しました。

Select oi.orders_id As orderid
    , oi.products_id As itemnumber
    , oi.products_quantity As quantity
    , oi.final_price As costperunit
    , oi.products_name As itemtitle
    , Group_Concat( Concat(patt.products_options_id, '-', patt.products_options_values_id) ) As optioncodes
    , Group_Concat( Concat(patt.products_options, ': ', patt.products_options_values) ) As optionnames
From orders_products oi
    Join orders o
        On o.orders_id = oi.orders_id
    Left Join orders_products_attributes patt
        On patt.orders_products_id = oi.orders_products_id 
            And patt.orders_id = oi.orders_id
Where o.orders_status =2 
    And oi.orders_id =10346
Group By oi.orders_id, oi.products_id
    , oi.product_quantity, oi.final_price, oi.products_name
Order By itemnumber
于 2011-05-09T16:26:22.017 に答える