特定の製品の合計売上を確認しています。製品は、親製品の一部である場合もあれば、そうでない場合もあります。例えば、製品は親製品に含まれることがありますが、順番に親製品に含まれる可能性があります...複数のレベルの製品をベースにした製品のMYSQLの合計売上
実際に参照する必要があるテーブルは2つだけです。
Orders_Products
orders_products_id
products_id
products_quantity
Layered_Products
parent_id
subproduct_id
subproduct_qty
次のように私たちが使用したテーブルの内容は以下のとおりです。
Orders_Products
orders_products_id | products_id | products_qty
-------------------+-------------+--------------
8922 | 7232 | 1
8711 | 6823 | 2
8658 | 6823 | 1
8633 | 6823 | 2
8702 | 7538 | 1
8690 | 7538 | 1
8622 | 7538 | 2
Layered_Products
parent_id + subproduct_id + subproduct_qty +
----------+---------------+----------------+
6823 + 7232 + 1 +
7538 + 6823 + 4 +
このプロセスは、個々のクエリを使用することによって達成することができます。
SELECT IFNULL(SUM(products_qty),0) AS total_qty
FROM orders_products
WHERE products_id = '7232';
クエリ結果= total_qty = 1
SELECT lp.parent_id, lp.subproduct_qty,
IFNULL(SUM(op.products_qty) * lp.subproduct_qty,0) AS total_qty
FROM layered_products lp
LEFT JOIN orders_products op ON op.products_id = lp.parent_id
WHERE lp.subproduct_id = '7232';
クエリ結果= PARENT_ID = 6823。 subproduct_qty = 1; total_qty = 5
SELECT lp.parent_id, lp.subproduct_qty,
IFNULL(SUM(op.products_qty) * lp.subproduct_qty * [prior select subproduct_qty],0) AS total_qty
FROM layered_products lp
LEFT JOIN orders_products op ON op.products_id = lp.parent_id
WHERE lp.subproduct_id = [prior select parent_id];
クエリ結果= parent_id = 7538; subproduct_qty = 4; total_qtyすべてのクエリの= 16
合計= total_qty = 22
はしかし、私は1つのSELECTにすべてを取得しようとしています。あなたのSQLの達人の誰もがこれを達成するためのアイデアを持っていますか? 1週間以上作業していて、1レベルしか動かすことができません。 2番目の親レベルはまったく機能していません。試したサブクエリ、派生したクエリ、その他何かを見つけることができました。また、可能であれば追加のレベルを処理できるようにしたいと考えています。事前にありがとうございます...
ありがとう、私が得た結果に基づいて考えたものです – user2465835
私の投稿を編集しました。 – peufeu