MySQL-Problem (oder Unwissenheit.)
Moin allerseits, vielleicht kann mir hier jemand helfen:
Ich will für meinen Segelclub eine Webanwendung bauen, mittels der man die mehrfach im Jahr stattfindenden Wettfahrten ("Regatta") verwalten und auswerten kann.
In die Berechnung der gesegtelten Zeit fließt ein Wert ein, der sogenannte Yarstick, der eine gewisse Chancengleicheit der unterschiedlichen Boote herstellen soll. Die Formel dazu lautet:
Gesegelte Zeit (in Sekunden) x 100 geteilt durch die jewweilige Yardstickzahl.
So weit, so gut. In meiner Anwendung habe ich folgende Abfrage formuliert:
Bis hierhin funktioniert alles, die Umwandlung der Start- und Zielzeit in Sekunden passt und die Berechnung der Segelzeit auch. Ausgabe davon erfolgt im Format hh:mm:ss.
Und von da ab gehen alle weiteren Berechnungen schief. Die Umwandlung der "Segelzeit" in Sekunden scheitert daran, dass der Wert "Segelzeit" angeblich unbekannt ist. Und die Berechnung der Formel (wie oben beschrieben) führt zum Ergebnis 0?
Ich habe mir schon die Finger wund gesucht, aber bislang keine Lösung gefunden. Vermutlich ganz einfach, aber irgendwie wird man betriebsblind. Oder es liegt am Alter?
Hat jemand eine Idee?
Update:
Das Problem mit der Zeitdiffderenz in Sekunden konnte ich lösen:
Nur mit der Formel komme ich nicht weiter. Entweder wird der Wert "segelsec" als nicht existent angesehen oder es ergibt einen Wert 0. ??
Ich will für meinen Segelclub eine Webanwendung bauen, mittels der man die mehrfach im Jahr stattfindenden Wettfahrten ("Regatta") verwalten und auswerten kann.
In die Berechnung der gesegtelten Zeit fließt ein Wert ein, der sogenannte Yarstick, der eine gewisse Chancengleicheit der unterschiedlichen Boote herstellen soll. Die Formel dazu lautet:
Gesegelte Zeit (in Sekunden) x 100 geteilt durch die jewweilige Yardstickzahl.
So weit, so gut. In meiner Anwendung habe ich folgende Abfrage formuliert:
SELECT
`id`,
`id_veranstaltung`,
`schiff`,
`startzeit`,
`zielzeit`,
`startnummer`,
`yardstick`,
TIME_TO_SEC(startzeit) AS `startsec`,
TIME_TO_SEC(zielzeit) AS `endsec`,
TIMEDIFF(zielzeit, startzeit) AS `segelzeit`
FROM `veranstaltung_detaildaten`
Bis hierhin funktioniert alles, die Umwandlung der Start- und Zielzeit in Sekunden passt und die Berechnung der Segelzeit auch. Ausgabe davon erfolgt im Format hh:mm:ss.
Und von da ab gehen alle weiteren Berechnungen schief. Die Umwandlung der "Segelzeit" in Sekunden scheitert daran, dass der Wert "Segelzeit" angeblich unbekannt ist. Und die Berechnung der Formel (wie oben beschrieben) führt zum Ergebnis 0?
Ich habe mir schon die Finger wund gesucht, aber bislang keine Lösung gefunden. Vermutlich ganz einfach, aber irgendwie wird man betriebsblind. Oder es liegt am Alter?
Hat jemand eine Idee?
Update:
Das Problem mit der Zeitdiffderenz in Sekunden konnte ich lösen:
SELECT
`id`,
`id_veranstaltung`,
`schiff`,
`startzeit`,
`zielzeit`,
`startnummer`,
`yardstick`,
TIMEDIFF(zielzeit, startzeit) AS `segelzeit`,
TIME_TO_SEC(TIMEDIFF(zielzeit,startzeit))AS segelsec
FROM `veranstaltung_detaildaten`
Nur mit der Formel komme ich nicht weiter. Entweder wird der Wert "segelsec" als nicht existent angesehen oder es ergibt einen Wert 0. ??
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 3552911073
Url: https://administrator.de/forum/mysql-problem-oder-unwissenheit-3552911073.html
Ausgedruckt am: 20.05.2025 um 18:05 Uhr
4 Kommentare
Neuester Kommentar
Moin,
Die Lösung des Problems hast Du schon gefunden. Du kannst den Alias einer berechneten Spalte nicht in weiteren Berechnungen nutzen. Ist blöd, ist aber so. Das ist nicht Excel.
Deshalb bekommst du auch immer die Meldung, dass der Wert nicht vorhanden ist. Das ist richtig. Er ist tatsächlich im Moment des Selects nicht vorhanden, sondern erst nach der Abarbeitung des gesamten Statements.
Du musst also auch die Wertungsberechnung ganz von vorne beginnen mit
hth
Erik
Zitat von @KarloBakum:
Das Problem mit der Zeitdiffderenz in Sekunden konnte ich lösen:
Nur mit der Formel komme ich nicht weiter. Entweder wird der Wert "segelsec" als nicht existent angesehen oder es ergibt einen Wert 0. ??
Das Problem mit der Zeitdiffderenz in Sekunden konnte ich lösen:
SELECT
`id`,
`id_veranstaltung`,
`schiff`,
`startzeit`,
`zielzeit`,
`startnummer`,
`yardstick`,
TIMEDIFF(zielzeit, startzeit) AS `segelzeit`,
TIME_TO_SEC(TIMEDIFF(zielzeit,startzeit))AS segelsec
FROM `veranstaltung_detaildaten`
Nur mit der Formel komme ich nicht weiter. Entweder wird der Wert "segelsec" als nicht existent angesehen oder es ergibt einen Wert 0. ??
Die Lösung des Problems hast Du schon gefunden. Du kannst den Alias einer berechneten Spalte nicht in weiteren Berechnungen nutzen. Ist blöd, ist aber so. Das ist nicht Excel.
Du musst also auch die Wertungsberechnung ganz von vorne beginnen mit
TIME_TO_SEC(TIMEDIFF(zielzeit,startzeit)) * 100 / yardstick as result
hth
Erik
Um den Alias zu nutzen kann man auch mehrere Selects verschachteln, also z.B.:
Aber bei einem so schlicht gelagerten Fall ist das nicht erforderlich, erst wenn da wirklich eine komplexe Berechnung statt findet und man das nicht mehrfach einbauen will.
SELECT TIME_TO_SEC(t.segelzeit) AS `segelsec`
FROM ( SELECT TIMEDIFF(zielzeit, startzeit) AS `segelzeit`
FROM `veranstaltung_detaildaten` ) t