Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 25
1

Расчитать стоимость блюда с учетом количества этого блюда в штуках

29.05.2024, 13:17. Показов 597. Ответов 9
Метки нет (Все метки)

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

MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
-- Вычисление себестоимости блюд, входящих в комбо
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2024, 13:17
Ответы с готовыми решениями:

Найти блюда, у которых калорийности отличается от блюда c минимальной калорийностью на 20
Дан список блюд с указанием их калорийности. Найти блюда, у которых калорийности отличается от...

Сделать перенос блюда двойным кликом по блюду в stringgridе и удаление блюда из заказа
Здравствуйте, у меня есть программа &quot;Меню ресторана&quot;, которая содержит: Меню и Заказ. Из меню в...

Описать структуру Menu, содержащую поля: название блюда, вес блюда, количество калорий, цена
Описать структуру Menu, содержащую следующие поля: название блюда, вес блюда, количество калорий,...

составьте программу пожалуйста 17. Опишите запись с именем типа Recept, содержащую информацию о рецепте приготовления блюда:  Название блюда (тип str
17. Опишите запись с именем типа Recept, содержащую информацию о рецепте приготовления блюда:...

9
176 / 26 / 7
Регистрация: 14.04.2019
Сообщений: 208
29.05.2024, 22:05 2
Когда я вижу такие запросы, мне сразу становится жалко человека, которому понадобится
его изменить. Даже если это будет автор и пройдет только месяц
0
0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 25
30.05.2024, 10:09  [ТС] 3
Тогда как можно отрефакторить этот запрос, чтобы его было проще поддерживать?
У нас сложные задачи, для которых приходится писать сложные запросы
0
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,517
Записей в блоге: 4
30.05.2024, 10:43 4
Цитата Сообщение от AngelicQuasar Посмотреть сообщение
Блюдо делается из ингредиентов, заготовки и заготовки для заготовки
запрос конечно ужасный, если не сказать - жуткий

я бы видимо исходила из схемы состав изделия
-куда
-что
-тип что
- количество(входимость в вышестоящую сборку)
0
3400 / 1319 / 470
Регистрация: 31.05.2012
Сообщений: 4,668
30.05.2024, 10:46 5
ну сложный зхапрос, с кучей таблиц и связей, попробуй разберись не имея представления где что и с чем его едят. а ты про какие-то комбо, которых нет вообще в терминах sql, да и об субд ни слова, хотя вижу limit, значит точно не ms sql )
0
0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 25
30.05.2024, 11:58  [ТС] 6
Запрос жуткий, да. У нас такая схема базы, менять ее никто не будет. Приходится рабоать с этим. Никто не говорил, что будет просто)))
0
Модератор
9606 / 6215 / 2421
Регистрация: 21.01.2014
Сообщений: 26,510
Записей в блоге: 3
30.05.2024, 12:36 7
Цитата Сообщение от AngelicQuasar Посмотреть сообщение
У нас такая схема базы, менять ее никто не будет.
Бывает. Но тогда что Вы от нас-то хотите услышать? Все что могу лично - это посочувствовать, остальное - только при наличии базы. Какая СУБД, кстати?
0
0 / 0 / 0
Регистрация: 27.02.2023
Сообщений: 25
30.05.2024, 12:50  [ТС] 8
MySQL 8
0
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,517
Записей в блоге: 4
30.05.2024, 16:09 9
Цитата Сообщение от D1973 Посмотреть сообщение
Все что могу лично - это посочувствовать, остальное - только при наличии базы
или как минимум
- структуры таблиц, желательно с несколькими записями
- схемы таблиц
0
395 / 231 / 86
Регистрация: 28.04.2022
Сообщений: 1,167
31.05.2024, 10:04 10
Цитата Сообщение от AngelicQuasar Посмотреть сообщение
У нас такая схема базы, менять ее никто не будет.
Наш дом без окон и дверей. Приходится залезать в него через дымовую трубу. Это неудобно. Как сделать, чтобы было удобно?
Но никто дом перестраивать не будет! И точка!
0
31.05.2024, 10:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2024, 10:04
Помогаю со студенческими работами здесь

Определить стоимость самого дешевого блюда в ресторане
Помогите с задачей на записи: Составить программу, выводящую на экран меню ресторана &quot;Дракон&quot;...

Программа некорректно считает максимальную и минимальную стоимость блюда
Пожалуйста, помогите поправить программу. Программа не корректно считает максимальную и минимальную...

Создать мини проект, который будет рассчитывать стоимость одной порции блюда
Створити міні проект, який буде розраховувати вартість однієї порції страви. Передбачити внесення...

Записи/Структуры. В столовой предлагается комплексных обедов, состоящих из Q блюд. Известна стоимость и калорийность каждого блюда
помогите написать проги по решению этих двух задач)) данные считываются из текстого файла 2)В...

Составить программу, выводящую на экран меню детского кафе (наименование блюда, вес, цена). Определить стоимость заказан
Помогите пожалуйста: Во всех задачах записи (не менее 5) вводятся с клавиатуры, записываются в файл...

В столовой предлагается N комплексных обедов, состоящих из Q блюд. Известна стоимость и калорийность каждого блюда. Сколько стоит самый дешевый и самы
Тема: &quot;Структуры&quot;. В столовой предлагается N комплексных обедов, состоящих из Q блюд. Известна...

Определить стоимость самого дешевого блюда в меню ресторана "Дракон"
Помогите с задачей: Составить программу, выводящую на экран меню ресторана &quot;Дракон&quot; (наименование...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru