[MySQL] Komplexe Abfrage mit MySQL möglich?

jannicars

Erfahrenes Mitglied
Hallo,

als erstes mal eine beispiel tabelle:
Code:
id user_id object   time
---------------------
1 	1 	Test 	 0
2 	1 	Test1 100000
3 	1 		 200000
4 	1 	Test1 300000
5 	1 	Test1 400000
6 	1 	Test1 500000
7 	1 	Test2 600000
8 	1 		 700000
9   1 		 800000

Jetzt habe ich mit einem komplizierten PHP Script dies geschafft:
Code:
Test von 01.01.1970 bis 01.01.1970, Dauer: 0 Tage
Test1 von 02.01.1970 bis 02.01.1970, Dauer: 0 Tage
Objectlos von 03.01.1970 bis 03.01.1970, Dauer: 0 Tage
Test1 von 04.01.1970 bis 06.01.1970, Dauer: 2 Tage
Test2 von 07.01.1970 bis 07.01.1970, Dauer: 0 Tage
Objectlos von 09.01.1970 bis 10.01.1970, Dauer: 1 Tage

PHP Script möchte ich jetzt nicht posten,
ist aber eine einfache Abfrage+Array erzeugung und komplziertem vergleichen.

Gibt es vielleicht eine gute, schnelle Möglichkeit dies per MySQL zu machen?
 
Zuletzt bearbeitet:
Hey,

was ist genau dein Ziel?

Die "time" , die in der DB gespeichert wird; sind das die Sekunden vom 1.1.1970 oder was genau?
Ich sehe dein Problem gerade nicht.

ZUmal du bei den Sekunden einfach durch /60/60/24 dividieren musst bzw. durch 86400 dividieren;
dann erhäst du deine Tage...
 
was ist genau dein Ziel?

Das Ergebnis was du siehst oben, ist schon in PHP realisiert, es funktioniert auch sehr gut,
ob perfomant, ist eine andere Frage.

Deswegen wollte ich wissen ob ich sowas auch in reinem MySQL könnte, dass ich vllt so die rows zurückbekomme von MySQL:
Code:
'name' => 'Test', 'from' => 0, 'to' => 0
....
'name' => '', 'from' => 700000, 'to' => 800000

Das ich halt nurnoch einmal ne' Schleife machen muss+richtig formatieren.

Die "time" , die in der DB gespeichert wird; sind das die Sekunden vom 1.1.1970 oder was genau?
Genau, ein UNIX Timestamp

ZUmal du bei den Sekunden einfach durch /60/60/24 dividieren musst bzw. durch 86400 dividieren;
dann erhäst du deine Tage...

Warum so kompliziert, wenn es auch einfach geht => gmdate()
 
Zuletzt bearbeitet:
Warum so kompliziert, wenn es auch einfach geht => gmdate()

Du machst es gerade kompliziert.
Um die ANzahl der Tage zu erhalten, musst du die Zeitangaben voneinander subtrahieren oder die Sekunden durch die o.g. Zahl dividieren.

Du brauchst doch lediglich dein Select erweitern.

Zumal mir die Tabelle noch rätselhaft erscheint, wie werden die Information gespeichert?
Die Tabelle enthält mehrfach einen User X, Normalisierung wurde keinesfalls angewendet, etc...
 
Du machst es gerade kompliziert.
Um die ANzahl der Tage zu erhalten, musst du die Zeitangaben voneinander subtrahieren oder die Sekunden durch die o.g. Zahl dividieren.

Wird nur unnötig kompliziert wenn man Tage, Stunden und Minuten möchte.
PHP:
gmdate("z", $time);
gmdate("G", $time);
gmdate("i", $time);

3 Zeilen Code und fertig.

Du brauchst doch lediglich dein Select erweitern.

Aha und wie wenn das gleiche Objekt 2 mal kommt..?

Zumal mir die Tabelle noch rätselhaft erscheint, wie werden die Information gespeichert?
Die Tabelle enthält mehrfach einen User X, Normalisierung wurde keinesfalls angewendet, etc...
Das ist eine Art Verlauf Tabelle.
Dort werden noch tausende andere Informationen gespeichert.

Es gibt noch eine tabelle(Die Haupt Tabelle), dort stehen die Aktuellen Informationen drin,
diese hier ist nur da um eine "Geschichte" zu generieren.
 
Zuletzt bearbeitet:
DU solltest dich mal einigen, was du willst.
Wieso willst du nun Stunden, Minuten, Sekunden haben?! - kann ich vonm deinem ersten Post nicht ableiten.

SQL:
SELECT time AS "TIME", time as "TIME2" FROM table
dann mit den TIME Funktionen in SQL bearbeiten und anschließend formatieren.
 
Zuletzt bearbeitet von einem Moderator:
Zurück