Выволнить запрос для набора блюд и просуммировать результат

Есть такой запрос вычисления себестоимости блюда в ресторане:

SELECT SUM(totalCostPrice)
    FROM (SELECT SUM(costPriceAllIngredient) AS totalCostPrice
          FROM (SELECT SUM(IF(inv.gross <> 0, (inv.price_for_all / inv.gross) * II.weight, 0)) AS costPriceAllIngredient
                FROM products_combos pc,
                     invoice inv,
                     posinfo pi,
                     ingredient_info II,
                     ingredient I,
                     stock_item SI,
                     warehouses W
                WHERE pc.combos_id = :comboId
                  AND II.products_id = pc.products_id
                  AND I.id = II.ingredient_id
                  AND SI.ingredient_id = I.id
                  AND pi.client_legal_informations_id = 12
                  AND W.pos_info_id = pi.id
                  AND inv.stock_item_id = SI.id
                  AND inv.id = (SELECT inv_sub.id
                                FROM invoice inv_sub,
                                     stock_item si_sub
                                WHERE inv_sub.id in (inv.id)
                                  AND inv_sub.warehouses_id = W.id
                                  AND inv_sub.archive = FALSE
                                  AND inv_sub.expense = FALSE
                                  AND inv_sub.stock_item_id = si_sub.id
                                GROUP BY inv_sub.id
                                ORDER BY inv_sub.id
                                LIMIT 1)
                GROUP BY inv.name,
                         inv.price_for_all,
                         inv.price_for_one,
                         inv.gross,
                         inv.id
                ORDER BY inv.id) subquery_1
          UNION ALL
          SELECT SUM(costPriceBlank) AS costPriceBlank
          FROM (SELECT SUM(IF(inv.gross <> 0, (inv.price_for_all / inv.gross) * II.weight, 0)) AS costPriceBlank
                FROM products_combos pc,
                     invoice inv,
                     posinfo pi,
                     ingredient_info II,
                     ingredient I,
                     stock_item SI,
                     warehouses W,
                     blank B,
                     blank_info BI
                WHERE pc.combos_id = :comboId
                  AND BI.products_id = pc.products_id
                  AND B.id = BI.blank_id
                  AND II.blank_id = B.id
                  AND I.id = II.ingredient_id
                  AND SI.ingredient_id = I.id
                  AND pi.client_legal_informations_id = 12
                  AND W.pos_info_id = pi.id
                  AND inv.stock_item_id = SI.id
                  AND inv.id = (SELECT inv_sub.id
                                FROM invoice inv_sub,
                                     stock_item si_sub
                                WHERE inv_sub.id in (inv.id)
                                  AND inv_sub.warehouses_id = W.id
                                  AND inv_sub.archive = FALSE
                                  AND inv_sub.expense = FALSE
                                  AND inv_sub.stock_item_id = si_sub.id
                                GROUP BY inv_sub.id
                                ORDER BY inv_sub.id
                                LIMIT 1)
                GROUP BY inv.name,
                         inv.price_for_all,
                         inv.price_for_one,
                         inv.gross,
                         inv.id
                ORDER BY inv.id) subquery_2
          UNION ALL
          SELECT SUM(costPriceBlankInB) AS costPriceBlankInB
          FROM (select ((SUM(if(inv.gross <> 0, (inv.price_for_all / inv.gross) * II.weight, 0)) / B.weight) *
                        BI.weight) AS costPriceBlankInB
                from products_combos pc,
                     blank_info BI,
                     blank B,
                     invoice inv,
                     posinfo pi,
                     ingredient_info II,
                     ingredient I,
                     stock_item SI,
                     warehouses W
                where BI.products_id = pc.products_id
                  and BI.parent_id in (SELECT bi_sub.blank_id FROM blank_info bi_sub, products_combos pc_sub WHERE bi_sub.products_id = pc_sub.products_id and pc_sub.combos_id = :comboId)
                  and B.id in (BI.blank_id)
                  AND II.blank_id = B.id
                  AND I.id = II.ingredient_id
                  AND SI.ingredient_id = I.id
                  AND pi.client_legal_informations_id = 12
                  AND W.pos_info_id = pi.id
                  AND inv.stock_item_id = SI.id
                  AND inv.id = (SELECT inv_sub.id
                                FROM invoice inv_sub,
                                     stock_item si_sub
                                WHERE inv_sub.id in (inv.id)
                                  AND inv_sub.warehouses_id = W.id
                                  AND inv_sub.archive = FALSE
                                  AND inv_sub.expense = FALSE
                                  AND inv_sub.stock_item_id = si_sub.id
                                GROUP BY inv_sub.id
                                ORDER BY inv_sub.id
                                LIMIT 1)
                GROUP BY inv.id, B.weight, BI.weight) subquery_3) subquery_all;

Блюдо делается из ингредиентов, заготовки и заготовки для заготовки, поэтому в данном запросе отдельно считается себестоимость ингредиентов, заготовки, заготовки для заготовки и все это суммируется.

Кроме этого есть таблица count, в которой указано, с какой кратностью (в каком количестве) блюдо входит в комбо, сколько штук такого блюда в комбо. Поле count.id это айди блюда, поле count.count это количество данного блюда в комбо (в штуках).

Как допилить этот запрос так, чтобы по id комбо находились все блюда в этом комбо и по запросу выше считалась себестоимость всех входящих в комбо блюд с учетом их количества? Ломаю голову и не могу придумать решение.

Порлученный запрос надо будет встроить в другой запрос, который будет определять, себестоимость какого объекта считать


Ответы (0 шт):