Выволнить запрос для набора блюд и просуммировать результат
Есть такой запрос вычисления себестоимости блюда в ресторане:
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 комбо находились все блюда в этом комбо и по запросу выше считалась себестоимость всех входящих в комбо блюд с учетом их количества? Ломаю голову и не могу придумать решение.
Порлученный запрос надо будет встроить в другой запрос, который будет определять, себестоимость какого объекта считать