tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby vikozo » 21. March 2010 09:05

Guten Tag
in einer Tabelle habe ich Zeiten eingetragen mit dem Format time.
Nun der Imput sollte sein in hh:mm
als Output wünsche ich mir die Summer aller Zeiten im Format tt hh:mm

Jetzt bin ich mir aber nicht sicher ob es so direkt im MySQL berechnet wird, oder ob man es in PHP umformen muss.

vielen Dank für Infos

gruss
vincent
Bin Newbie - also wirklich ganz am anfang!
Arbeite Lokal mit XAMPP, PHP Eclipse, Mysql workbench
vikozo
 
Posts: 22
Joined: 19. February 2010 08:45
Location: schweiz

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby Nobbie » 21. March 2010 13:17

Zum einen mußt Du das Input Format hh:mm sowieso umrechnen auf hh:mm:ss (wobei trivialierweise ss immer = 00 ist), um es hin MySQL speichern zu können (weil das TIME Format so definiert ist), zum anderen ist das Outputformat weder ein TIME noch ein DATE Format, sondern eine Dauer (das ist das Input Format zwar auch, aber so lange hh kleiner als 24 ist, fällt das nicht weiter auf). Und für "Dauer" gibt es keinen MySQL Typ, also auch keine MySQL Funktionen.

Man könnte als Zwischenlösung mit Hilfe der MySQL Funktionen SUM() und TIME_TO_SEC() die Summe in Sekunden berechnen lassen um es dann zum Schluss in PHP wieder in das Ausgabeformat tt hh:mm umzurechnen. Aber das wird sicherlich nicht viel schnell gehen als gleich die ganze Berechnung in PHP zu verlagern.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby vikozo » 21. March 2010 16:28

@Nobbie
das klappt bisher
SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( `Divelog_Duration` ))) FROM Divelog
bloss wenn es über 24h wird es nicht in Tage stunden minuten angezeigt
gruss
vincent
Bin Newbie - also wirklich ganz am anfang!
Arbeite Lokal mit XAMPP, PHP Eclipse, Mysql workbench
vikozo
 
Posts: 22
Joined: 19. February 2010 08:45
Location: schweiz

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby Nobbie » 21. March 2010 20:59

vikozo wrote:@Nobbie
wenn es über 24h wird es nicht in Tage stunden minuten angezeigt


Eben, genau was ich sage. Aber wenn wenigstens auch Stunden größer als 24 angezeigt werden, ist das Ergebnis an sich ja richtig, nur mußt Du eben die Stunden auf Tage (und Stunden) umrechnen (was ja nicht sonderlich schwierig ist, bekanntlich hat ein Tag 24 Stunden).
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby Stepke-DSL » 22. March 2010 12:23

Hallo,

Du solltest dir mal die Zeit-Funktionen von MySQL ansehen (http://dev.mysql.com/doc/refman/5.1/en/ ... tions.html).
BTW: Wie schon gesagt kennt MySQL keine Zeitdauer. Aus diesem Grund hätte ich einen Start- und einen Endzeitpunk gepseichert (im DATETIME-Format). Diese beiden Zeiten kann man ggf. für spätere Auswertungen (falls erforderlich) besser wieder heranziehen, als eine Zeitdauer... Und außerdem, wie in deinem Fall, mittels TIMEDIFF eine Zeitdauer berechnen (Tage müssten dann noch errechnet werden, da auch mehr als 24 Stunden zurückgegeben werden).
Bsp.:
Code: Select all
SELECT TIMEDIFF('2010-03-22 14:25:32', '2010-03-21 12:00:00') AS `Dauer` FROM `tabelle`;


Oder, du berechnest die Dauer anahand der beiden Daten mit PHP...

MfG Stepke
Stepke-DSL
 
Posts: 313
Joined: 12. July 2007 16:08
Operating System: Win XP Pro SP3 + SuSe Linux

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby vikozo » 23. March 2010 22:24

@all
danke für die feedbacks, bloss habe ich kein "Endtermin" ich weiss in etwa wenn der anfang ist und ganz sicher wie lange (zeigt die Stopuhr an), macht meines Erachtens wenig Sinn es zuerst ausrechnen zu müssen um ein Endzeit zu haben, oder? :roll:

eine frage noch im ähnlich
divelog_duration (time in hh:mm)
divelog_Datum (Date)

folgenden code habe ich überlegt
SELECT Divelog_Duration, Divelog_Datum FROM Divelog
WHERE DATEPART(yyyy,Divelog_Datum) = DATEPART(yyyy,getdate())

leider kann ich in der WHERE funktion die Datepart nicht benützen.

ich dachte mir, in der where funktion liste ich mal auf was alles in diesem Jahr getan wurde, würde es klappen würde ich dann wenn möglich auch die Summe berechnen lassen für das laufende Jahr.
gruss
vincent
Bin Newbie - also wirklich ganz am anfang!
Arbeite Lokal mit XAMPP, PHP Eclipse, Mysql workbench
vikozo
 
Posts: 22
Joined: 19. February 2010 08:45
Location: schweiz

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby Stepke-DSL » 24. March 2010 08:05

Hallo,

Zu dem Problem mit dem SQL-Statemant:
Code: Select all
SELECT Divelog_Duration, Divelog_Datum FROM Divelog
WHERE YEAR(Divelog_Datum) = YEAR(NOW())


Versuch es mal so.

MfG Stepke
Stepke-DSL
 
Posts: 313
Joined: 12. July 2007 16:08
Operating System: Win XP Pro SP3 + SuSe Linux

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby vikozo » 24. March 2010 10:12

@Stepke-DSL
vielen dank das funktioniert super!
dann wollte ich den gleichen Code nehmen und aus Divelog_Duration ein SUM(Divelog_Duration) machen
was nicht geklappt hat.

Dann, mehr aus verzweiflung habe ich im Select das Datum rausgelöscht
Code: Select all
SELECT SUM(Divelog_Duration)  FROM Divelog
WHERE YEAR(Divelog_Datum) = YEAR(NOW())

zu meiner überraschung klappt das - ich war der meinung ich müsse im select das Datum erwähnen damit ich es in der Where verwenden kann, dem ist aber nicht so.

gruss
vincent
Bin Newbie - also wirklich ganz am anfang!
Arbeite Lokal mit XAMPP, PHP Eclipse, Mysql workbench
vikozo
 
Posts: 22
Joined: 19. February 2010 08:45
Location: schweiz

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby Stepke-DSL » 24. March 2010 10:32

Du kannst im WHERE alle Spalten der Tabelle(n) angeben, auch die, die du nicht im SELECT auswählst...
Stepke-DSL
 
Posts: 313
Joined: 12. July 2007 16:08
Operating System: Win XP Pro SP3 + SuSe Linux

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby vikozo » 24. March 2010 22:17

:oops: :roll: :(
Die verzweiflung wächst.
Jetzt würde eigentlich alles gehen wie ich es mir vorstelle - ausser das es falsch rechnet!
Diese Formel habe ich verwendet
http://www.php.de/php-tipps-2004-2/1382 ... post101920
und hier ist das falsche resultat
http://www.weltmeer.ch/Divelog/admin/35_a.php

hoffe das jemand den Bug findet!

gruss
vincent
Bin Newbie - also wirklich ganz am anfang!
Arbeite Lokal mit XAMPP, PHP Eclipse, Mysql workbench
vikozo
 
Posts: 22
Joined: 19. February 2010 08:45
Location: schweiz

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby Nobbie » 24. March 2010 23:28

vikozo wrote:hoffe das jemand den Bug findet!


Du selbst natürlich, wer sonst?! Witzig.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby vikozo » 25. March 2010 07:27

Nobbie
wüsst ichs müsst ich nicht um hilfe und hinweise betteln :roll:
Nobbie wrote:
vikozo wrote:hoffe das jemand den Bug findet!


Du selbst natürlich, wer sonst?! Witzig.
vikozo
 
Posts: 22
Joined: 19. February 2010 08:45
Location: schweiz

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby vikozo » 25. March 2010 08:59

Ich hab etwas gefunden :lol:
wenn die Zelle als Type "time" definiert ist. :!:
ist 1 Minute = 100 Sekunden :roll:

aber ist das logisch? :?:

gruss
vincent
Bin Newbie - also wirklich ganz am anfang!
Arbeite Lokal mit XAMPP, PHP Eclipse, Mysql workbench
vikozo
 
Posts: 22
Joined: 19. February 2010 08:45
Location: schweiz

Re: tabelle zelle time hh:mm ---> Summe Output in tt hh:mm

Postby Nobbie » 25. March 2010 10:56

Sagen wir es anders herum: mich hätte es mehr als gewundert, wenn man die SUM() Funktion einfach so auf ein TIME-Feld loslassen kann. Das mußt Du schon vorher in Sekunden umrechnen, damit das richtig rechnet.
Nobbie
 
Posts: 13170
Joined: 09. March 2008 13:04


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 14 guests