karlobakum

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:

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. ??
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 3552911073

Url: https://administrator.de/forum/mysql-problem-oder-unwissenheit-3552911073.html

Ausgedruckt am: 20.05.2025 um 18:05 Uhr

em-pie
em-pie 05.08.2022 aktualisiert um 13:05:20 Uhr
Goto Top
Moin,

hast du mal ein
...
  TIME_To_SEC(TIMEDIFF(zielzeit, startzeit)) AS `segelzeitinSek`
...

versucht

Gruß
em-pie
erikro
erikro 05.08.2022 um 13:23:28 Uhr
Goto Top
Moin,

Zitat von @KarloBakum:
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. face-wink 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

TIME_TO_SEC(TIMEDIFF(zielzeit,startzeit)) * 100 / yardstick as result

hth

Erik
KarloBakum
KarloBakum 05.08.2022 um 13:52:37 Uhr
Goto Top
Danke für die Hinweise, das bringt mich zunächst mal ein Stück weiter. Schauen wir mal, wie lange es dauert, bis die Euphorie der nächsten Ratlosigkeit weichen muss.
ukulele-7
ukulele-7 05.08.2022 um 15:34:48 Uhr
Goto Top
Um den Alias zu nutzen kann man auch mehrere Selects verschachteln, also z.B.:
SELECT TIME_TO_SEC(t.segelzeit) AS `segelsec`
FROM ( SELECT TIMEDIFF(zielzeit, startzeit) AS `segelzeit`
FROM `veranstaltung_detaildaten` ) t
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.