• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Mehrere timediff addieren?

SimoNxD

Mitglied
Hallo,

ich hätte mal ne Frage bezüglich addieren von mehreren Werten.
Ich hab in der Datenbank Felder wo ich die Zeit Speicher wenn sich ein User einloggt und ein Feld wo die Zeit gespeichert wird wenn er sich ausloggt.

Dann rechne ich die Zeit von-bis so zusammen:

Code:
SELECT *,CONCAT(timediff(bis_under,von_under)) as hour FROM common.gm_online WHERE MONTH(von_under) = '".$monat."' AND id_gm ='".$_SESSION['user_id']."'"

Die komplette Abfrage:

PHP:
$sqlOnline_under = "SELECT * FROM common.gm_online WHERE id_gm = ".$_SESSION['user_id']." and status_under='0'";
$qryOnline_under = mysqli_query($db_tool ,$sqlOnline_under);
$getOnline_under = mysqli_fetch_object($qryOnline_under);

Am Ende gebe ich das ganze aus:

zeitxs6zyj4pwk.jpg


Nun ist es ja so, das ein user sich mehrmals am Tag ein und ausloggen kann, jedes mal wird eine neuer Datensatz gespeichert in der Datenbank.

Wie kann ich jetzt alle Datensätze von die am selben Tag aufgezeichnet wurden, zusammen rechnen und das ganze nurnoch als einen Wert ausgeben?

Also im Beispiel wären es dann: 1sec+2sec+2sec+7sec+35sec+6sec+4sec (Das sollte im Hintergrund laufen)
Und stehen sollte dann nurnoch: -- 18.12.2013 -- | 00:00:57

Ich hoffe ich konnte einigermaßen gut erklären was ich erreichen möchte...

MfG
Simon
 
PHP:
SELECT bis_under, von_under, CONCAT(timediff(bis_under,von_under)) as hour
SUM (hour)
FROM common.gm_online
WHERE MONTH(von_under) = '12'
AND id_gm ='52168'

Also mit SUM rechne ich werte zusammen?
Weil wie ich das jetzt gemacht habe, funktioniert es nicht o.o
 
Hallo,

ungetestet würde ich das ungefähr so machen:

PHP:
SELECT bis_under, von_under, SUM(timediff(bis_under,von_under)) as hour
FROM gm_online
WHERE MONTH(von_under) = '12'
AND id_gm ='52168'
GROUP BY von_under
 
Okay also

HTML:
SELECT bis_under, von_under,
SUM(timediff(bis_under,von_under)) as hour
FROM gm_online WHERE DATE(von_under) = DATE(NOW()) 
AND id_gm ='".$_SESSION['user_id']."'

Das klappt soweit wunderbar.

Natürlich wird mir der wert jetzt anstatt z.B 00:00:30 so angezeigt: 30.00000, aber das ist soweit kein Problem das lässt sich ja wunderbar mit PHP so aufgeben das die Stellen hinter dem . Ausgeblendet werden und nach jeden 2. Zeichen ein : kommt ^-^ (wenn ichs richtig in erinnerung habe, müsste nochmal schauen wie es geht)

In meiner Abfrage hohle ich mir allerdings nur die "Sum(hour)" von dem aktuellen Tag.
Wie hohle ich mir die jetzt von Montag - Freitag?
Sodass es jedes mal einzelnd zusammen gerechnet wird (für jeden tag) und nicht alle 7 Tage zusammen?
 
Hallo,

Du hast die GROUP BY- Klausel vergessen. Wenn Du den Monat sowieso immer schon filterst, könntest Du nach dem Tag gruppieren und hättest dann in deinem Beispiel für jeden Tag des Monats, der auch in der Datenbank vorhanden ist, einen Eintrag im Ergebnis.

Ich würde das Summieren übrigens mit Sekunden machen:

PHP:
SUM(TIMESTAMPDIFF(SECOND, von_under, bis_under)) AS hour

Das Umrechnen der Sekunden machst Du dann entweder in PHP oder auch direkt in MySQL.
 
Ha! Du bist ein Genie.. Wieso bin ich nicht selbst drauf gekommen in Sekunden zu rechnen *Selfpalm*
Ist 1000x einfacher als jetzt großartig mit strchr zu arbeiten...

Ich werds testen und später mein Ergebniss dann mal verkünden oder evtl. Probleme die auftretten

Danke dir nochmal

#edit

Ich möchte gern eine 7 Tages ansicht (Montag - Freitag)
So :D Heute ist die 51ste Kalender Woche wenn ich mich nicht irre...
Allerdings wenn ich das ganze jetzt so angebe:

PHP:
WHERE WEEK(von_under)='51'
bekomme ich keine Einträge.

Wenn ich jetzt aber angebe:

PHP:
WHERE WEEK(von_under)='50'

Bekomme ich die einträge dieser Woche?
Woran liegt es ? (Apache, SQL Server usw laufen auf meinem PC)

@Darkman

Wenn ich es nicht nach Monat sondern Woche filter, zeigt er mir für jeden Tag einen Eintrag an sofern ich das jetzt richtig verstehe?
Also erst nach Woche Filtern.

Dann Group By 'von_under' ?
 
Zuletzt bearbeitet:
Hallo,

schau Dir mal die Dokumentation an. Der Befehl "WEEK" hat zusätzlich noch Parameter, die Du angeben kannst: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

Wenn ich es nicht nach Monat sondern Woche filter, zeigt er mir für jeden Tag einen Eintrag an sofern ich das jetzt richtig verstehe?
Also erst nach Woche Filtern.

Die Woche packst Du weiterhin in Deine WHERE-Klausel. Dann gruppierst Du nach dem Wochentag (WEEKDAY, siehe Doku). Dann solltest Du erhalten, wonach Du suchst. Kann das gerade leider nicht testen, aber sollte ein Ansatz sein.
 
Hallo :)

Der Urlaub ist vorbei und weiter geht es mit Php
Darkman erstmal nochmal danke für die hilfe.

Nun das Problem
Ich sollte es ja nach WEEKDAY ordnen.
Also nach Wochentag.

Doch wie gebe ich dies nun an?
PHP:
SELECT*,
SUM(TIMESTAMPDIFF(SECOND,von,bis))as hourFROM gm_online WHERE WEEK(von)=WEEK(NOW())AND id_gm='52168'GROUP BY WEEKDAY(WEEK(von))

So habe ich es derzeit, leider zeigt er mir nur 1 Ergebniss an.
Anstatt 2 (Hab einen Eintrag von 18.01 und vom 19.01)
Angezeigt werden sollen beide
Vlt. ist es noch wichtig zu wissen, das ein Tag mehrere Einträge haben kann D:
Sprich

von = 19.01.2014 12:00:00
bis = 19.01.2014 13:00:00

und

von = 19.01.2014 15:00:00
bis = 19.01.2014 17:00:00

Die von den einzelnden tagen soll er zusammen rechnen und als einen Tag ausgeben.
Und das für jeden Wochentag der Aktuellen Woche

MfG
 
Zuletzt bearbeitet:
Zurück
Oben