Diverse Tabellen als Berechnungsgrundlage *steh im Wald*
Hallo zusammen,
Ich hab mich gnadenlos zerfranst.
Ziel:
Eine Applikation auf Grundlage der DB, welche mir die Ernährungsempfehlungen meiner Sportler errechnet.
1. Tabelle Sportler
Name, Vorname, Alter, Verein, Sportart, Position
2. Tabelle Leistungsdaten Sportler (jeder Sportler 1, kann mehrere Leistungsdaten n haben)
Datum, aktuelles Gewicht, Größe, Körperfett, Schwitzmenge, etc.
3. Sportdrinks
Marke, Name, kcal pro Liter, KH pro Liter, Natrium pro Liter, etc.
4. Ich möchte eine schöne Übersicht die mir folgendes Ausgibt:
- Grundumsatz errechnet nach Harris-Benedikt: wichtig Alter, Größe, Gewicht (also Daten aus Tabelle 1 und 2)
- Gesamtumsatz = Grundumsatz + Faktor
- Trinkmenge = Schwitzrate * Dauer/60 (Eingabefeld)
- Menge Kohlenhydrate Sportdrink = Trinkmenge * KH pro Liter
- Restmenge Kohlenhydrate = Bedarf (Tabelle 5) * Dauer/60 - Menge Kohlenhydrate Sportdrink
Die Formeln zur Berechnung der Wert etc. sind mir geläufig. Ich stehe nun vor einem Problem. Ich habe in meiner Tabelle Leistungsdaten 3 Dummywerte angelegt. 2x Sportler 1 und 1x Sportler 2
Nun möchte ich in meiner Auswertung (Tabelle Sportler?) den aktuellsten Datensatz aus der Tabelle Leistungsdaten für den jeweiligen Sportler abrufen und mit den Werten aus den zugehörigen Feldern meine Ernährungsempfehlung generieren.
Habe ein wenig rumprobiert und folgende Lösung erstellt, die aber nicht funktioniert, weil Sie den letzen Wert unabhängig von der Zugehörigkeit eines Athleten verwendet. Kurz: Ich hab die Übersicht aber alle bekommen dieselbe Empfehlung:
if Geschlecht like "Männlich" then
66.5 + last(((select 'Körperdaten Athleten') order by number(Nr)).Nr).'Körpergewicht in kg' * 13.7 + last(((select 'Körperdaten Athleten') order by number(Nr)).Nr).'Körpergröße in cm' * 5 - Alter * 6.8
else
if Geschlecht like "Weiblich" then
655 + last(((select 'Körperdaten Athleten') order by number(Nr)).Nr).'Körpergewicht in kg' * 9.6 + last(((select 'Körperdaten Athleten') order by number(Nr)).Nr).'Körpergröße in cm' * 1.8 - Alter * 4.7
end
end
Ich gehe schwer davon aus, dass ich meine Tabellenbeziehungen nicht im Griff habe aber ohne Hilfe steh ich grad im Wald... bin schon den ganzen Tag ab rumdoktern.
Viele Grüße
Basti
4 Antworten
-
Hallo Basti,
hast Du die Leistungsdaten in einer Untertabelle? Oder ist das eine komplett eigenständige Tabelle?
Wenn du diese als Untertabelle anlegst (zB. "aktuelle Körperdaten", hast Du pro Sportler zugriff auf seine jeweiligen Leistungsdaten... das macht vieles einfacher. Du musst nun bei deinen Formeln einfach immer nur auf den letzten Datensatz dieser Untertabelle verweisen.
if Geschlecht like "männlich" then 66.5 + last('aktuelle Körperdaten').'Körpergewicht in kg' * 13.7 + last('aktuelle Körperdaten').'Körpergröße in cm' * 5 - Alter * 6.8 else
usw....
Die aktuellen Körperdaten haben in einer allgemeinen Tabelle nichts zu suchen, da sie ja auf einen jeweiligen Sportler bezogen sind. Du sparst dir damit das unnötige suchen des Datensatzes über "select" und where usw....
-
Die Daten sind in einer extra Tabelle.
Ich werde, sobald ich zu Hause bin, dass nachstellen und berichten.
Herzlichen Dank schon mal.
Ich habe mir einige Videos zu Ninox angeschaut aber irgendwie fehlt mir persönlich noch der Rote Faden und best practice… ich denke aber das kommt mit der Bedienung und der Zeit.
-
Das hab ich heut dank deiner Hilfe richtig implementiert.
Wie sieht es denn jetzt mit weiteren Berechnungen aus?
ich hätte zum Beispiel noch eine weitere Tabelle, dort habe ich die gängigsten Sportarten mit ihrem Kalorienverbrauch pro Stunde aufgelistet. Sportart gibt es drei Werte, je nach Intensität, leicht Mittel hart.
Zusätzlich habe ich eine weitere Tabelle, welche den Energieinhalt der gängigsten Sport Getränke beinhaltet.
Ich möchte in der Auswertung jetzt noch folgendes erreichen:
Die empfohlene Trinkmenge habe ich anhand der Schwitzrate und der Dauer berechnet.
nun möchte ich für diese dauer den Energiebedarf anhand der Tabelle „Sportarten“ errechnen. Aus der Trinkmenge und dem Energie Inhalt der Sport Getränke kenne ich die Energiezufuhr. Eine einfache Subtraktion aus Bedarf-Zufuhr ergibt den zuzuführenden Rest (über Gels, Riegel, etc.)
da ich nun im Datensatz des Athleten eine Berechnung durchführen will, welche wiederum Werte aus zwei weiteren Tabellen beinhaltet, bin ich mir nicht sicher, wie ich dies tun soll. Zumal ich nicht weiß wie ich zu dem Wert aus „Radfahren“ + „hart“ komme um damit zu rechnen. Das Ganze soll natürlich generisch sein. Ich wähle für den Athleten die Sportart + Intensität per drop down und die Funktion soll den zugehörigen Wert/h nehmen
LG
-
Prinzipiell musst Du dir im Vorfeld immer Gedanken machen, wie deine Datenstruktur aussehen muss. Gibt es Daten die "für alle" interessant sind, gibt es Daten, die dynamisch für den Moment der Betrachtung wichtig sind, gibt es Daten die dynamisch in dem Moment erzeugt werde, dann aber statisch abgelegt werden usw.
Daraus resultiert dann der Aufbau der Datenbank. Sportgetränke sind für "alle" Datensätze interessant, daher bekommen diese eine eigene Tabelle - korrekt.
Du kannst pro Athlet zb. ein dynamische Auswahlfeld anlegen, welches mit den Daten aus der Tabelle Sportarten verknüpft ist. In dem moment hast du die Daten pro Athlet parat und kannst damit rechnen. Willst Du die Werte aber festlegen (zB. für eine monatliche Übersicht) müssten die Werte dann per Knopfdruck in eine Untertabelle geschrieben werden ....
Das wird eine komplexe Angelegenheit - aber genau dafür ist Ninox ja gemacht.
Also, dyn. Auswahlfeld namens "SPORTART" "im" Athleten (das bekommst du nur über "Felder bearbeiten" nicht über das normale Menü wenn du den Schraubenschlüssel aktivierst... Dort unter "dynamic Values" kommt deine Sportarten Tabelle rein "select Sportarten" ... unter "Name des dynamischen Werts" kommt das Textfeld mit der Bezeichnung der Sportart rein ...
Dann das Auswahlfeld "INTENSITÄT".
Für deine Berechnungen musst Du dir nun immer vorab die Variablen befüllen je nach Konstellation deiner Auswahlfelder. Ein dyn. Auswahlfeld gibt dir nur eine Datensatz ID wieder, also musst Du dir via select() oder via record() die Daten holen... leider kannst Du den Feldnamen nicht direkt aus dem Auswahlfeld INTENSITÄT holen, der muss scheinbar über eine if-Abfrage laufen... ich gehe hier mal davon aus, du hast 3 Felder "Leicht", "Mittel", "Hart" in der Tabelle Sportart.
let myIntensität := text(INTENSITÄT); let mySportartID := number(SPORTART); let myWert := (select Sportart)[Nr = mySportartID ].if myIntensität = "Leicht" then Leicht else if myIntensität = "Mittel" then Mittel else Hart end end
myWert beinhaltet nun also den Feldinhalt der gewählten Sportart und Intensität...
Content aside
- Status Answered
- vor 1 JahrZuletzt aktiv
- 4Antworten
- 69Ansichten
-
2
Folge bereits