PostgreSQL, złożone zapytanie do obliczania składników według receptury
Muszę obliczyć żywność i składniki używanej żywności przechowywane w tabelach PostgreSQL:
table1 'usedfood'
food food used used
code name qty meas
----------------------------------------------
10 spaghetti 3 pcs
156 mayonnaise 2 pcs
173 ketchup 1 pcs
172 bolognese sauce 2 pcs
173 ketchup 1 pcs
10 spaghetti 2 pcs
156 mayonnaise 1 pcs
table2 'ingredients'
food ingr. ingredient qty meas
code code name /1 in 1
----------------------------------------------
10 1256 spaghetti rinf 75 gramm
156 1144 salt 0.3 gramm
10 1144 salt 0.5 gramm
156 1140 fresh egg 50 gramm
172 1138 tomato 80 gramm
156 1139 mustard 5 gramm
172 1136 clove 1 gramm
156 1258 oil 120 gramm
172 1135 laurel 0.4 gramm
10 1258 oil 0.4 gramm
172 1130 corned beef 40 gramm
wynik:
used
times code food/ingredient qty meas
----------------------------------------------
5 1256 spaghetti rinf 375 gramm
8 1258 oil 362 gramm
2 1138 tomato 160 gramm
3 1140 fresh egg 150 gramm
2 1130 corned beef 80 gramm
3 1139 mustard 15 gramm
8 1144 salt 3.4 gramm
2 1136 clove 2 gramm
2 1135 laurel 0.8 gramm
2 173 ketchup 2 pcs //haven't any ingredients
Na razie robię to przez zapętlanie tabeli table1 i queriying table2 dla każdego wiersza, a następnie dodawanie wyników i tak dalej (z C), co może być bardzo powolne na większych danych.
Tabela 1 zawiera kod żywności, nazwę żywności i zużytą ilość. Tabela 2 zawiera składniki (w nieuporządkowanym porządku) z kodem i stosowaną ilością na jeden pokój żywnościowy, a także kod żywności, w którym się pojawia.
Zużyta ilość z tabeli 1 powinna być pomnożona przez ilość z tabeli 2 zgodnie z każdą recepturą i powinna być dodana do wyniku kodu składników.
Tak więc wszystkie rzędy składników, które trafiają do „spaghetti”, zaczynają się od kodu spaghetti do żywności (10).
Żywność bez jakiegokolwiek składnika powinna być obliczona z ilości z tabeli 1 i pokazana z taką samą nazwą. To oznacza, że jest to produkt końcowy (jak butelka piwa).
Tutaj może być więcej komplikacji, ale boję się zapytać. Na przykład lista składników może być składnikiem, który sam jest recepturą. Na przykład musztarda zawierająca ocet, sól, nasiona itp. Co wtedy? W tabeli 2 pokazanej przykładowej musztardy używa się jako gotowego produktu (składnika).
Czy jest jakiś sposób na wykonanie takich obliczeń i szybkie uzyskanie wyników przy użyciu PostgreSQL, który da gotowe wyniki do programu C?
Może nie jest to dla mnie zbyt skomplikowane? Jak wyglądałoby to zapytanie?