PostgreSQL, komplexe Abfrage zur Berechnung von Zutaten nach Rezept
Ich muss die in PostgreSQL-Tabellen gespeicherten Lebensmittel und Zutaten für gebrauchte Lebensmittel berechnen:
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
Ergebnis:
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
Im Moment mache ich das, indem ich Tabelle1 durchlaufe und Tabelle2 für jede Zeile abfrage, dann Ergebnisse hinzufüge und so weiter (mit C), was bei größeren Daten sehr langsam sein kann.
Tabelle 1 enthält den Lebensmittelcode, den Namen des Lebensmittels und die verwendete Menge. Tabelle 2 enthält Zutaten (in unordentlicher Reihenfolge) mit Code und verwendeter Menge für einen Frieden von Lebensmitteln und auch Code von Lebensmitteln, in denen angezeigt wird.
Die verbrauchte Menge aus Tabelle 1 sollte gemäß jedem Rezept mit der Menge aus Tabelle 2 multipliziert und zum Ergebnis des Zutatencodes addiert werden.
Alle Zutatenreihen, die zu "Spaghetti" gehören, beginnen mit dem Lebensmittel-Spaghetti-Code (10).
Lebensmittel ohne Zutaten sollten mit der Menge aus Tabelle 1 berechnet und mit demselben Namen angegeben werden. Das heißt eigentlich, es ist ein Endprodukt (wie eine Bierflasche).
Hier mag es komplizierter sein, aber ich habe Angst zu fragen. Zum Beispiel in Ingredinets Liste kann Zutat sein, die von ihm selbst Rezept ist. Zum Beispiel Senf, der aus Essig, Salz, Samen usw. besteht. Was dann? In Tabelle 2 des gezeigten Beispiels wird Senf als fertiges Produkt (Komponente) verwendet.
Gibt es eine Möglichkeit für eine solche Berechnung und schnelle Ergebnisse, wenn nur PostgreSQL verwendet wird, das dem C-Programm fertige Ergebnisse liefert?
Vielleicht nicht so komplex, wie es mir scheint? Wie würde diese Abfrage aussehen?