karlobakum
Goto Top

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. ??

Content-Key: 3552911073

Url: https://administrator.de/contentid/3552911073

Printed on: April 16, 2024 at 18:04 o'clock

Member: em-pie
em-pie Aug 05, 2022 updated at 11:05:20 (UTC)
Goto Top
Moin,

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

versucht

Gruß
em-pie
Member: erikro
erikro Aug 05, 2022 at 11:23:28 (UTC)
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
Member: KarloBakum
KarloBakum Aug 05, 2022 at 11:52:37 (UTC)
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.
Member: ukulele-7
ukulele-7 Aug 05, 2022 at 13:34:48 (UTC)
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.