Halloo,
Schlage mich jetzt schon ein weilchen mit folgenden Problem rum.
Ich habe eine Anwendung, in der ein User ein Von- und Bis-Datum eingeben kann. Nun will ich in der Datenbank suchen ob Datensätze für diesen zeitraum vorliegen und will mir das Minimum- und Maximum-Datum ausgeben lassen.
Beispiel:
User-Eingabe:
Min: 01.01.2009
Max: 31.12.2009
Query bei normaler Suche:
SELECT `timestamp` FROM `daten` WHERE `timestamp` BETWEEN '2009-01-01' AND '2009-12-31';
Ausgabe könnte folgendes sein:
-> [B]2009-08-12 16:00[/B]
2009-08-20 16:00
2009-09-01 16:00
2009-09-10 16:00
2009-10-05 16:00
[B]2009-11-20 16:00 [/B]
Was ich nun gerne hätte wären folgende Datensätze
-> 2009-08-12 16:00
2009-11-20 16:00
(Brauche das Ganze um einen Zeitraum festlegen zu können :))
Ich will mir nur das Minimum und das Maximum Datum ausgeben lassen, was bei einer normalen Suche gefunden werden würde
Siehe in der mittleren „Code-Box“ ist es der erste und der letzte Datensatz.
Ich Depp hatte noch als drittes den timestamp selbst nochmal auslesen lassen und dann hat er wegen nem group problem gemeckert. Aber natürlich. Wozu die Timestamps nochmal auslesen lassen
Vielen Dank. Klappt wunderbar =)
Mich interessiert nun folgendes.
Ich lese jetzt die Timestamps aus und prüfe in PHP welchen Zeitraum es darzustellen gibt. Wenn ich den zeitraum habe starte ich einen neuen Query. Der folgender maßen aussehen könnte (Um nach Monaten zu ordnen):
SELECT `daten` FROM `tabelle` WHERE `timestamp` BETWEEN '2009-01-01' AND '2009-12-31' GROUP BY DATE_FORMAT(`timestamp`, [B]%Y-%m[/B]);
Wollte nun fragen ob folgender Mysql-Abfragen Aufbau funktioniert
(Vorsicht imaginärer Code ^^)
# Testen ob Zeit größer als zeitraum Stunde, wenn nicht dann DateFormat -> Minute,
# ansonsten abfragen ob zeitraum größer Tag, wenn nicht dann DateFormat -> Stunde
# ansonsten DateFormat->Tag
SELECT MIN(`timestamp`) AS `minimum`, MAX(`timestamp`) as maximum
IF( TIMESTAMP((`maxmimum` - `minimum`)) > 3600,
IF( TIMESTAMP((`maxmimum` - `minimum`)) > 86400),
"%Y-%m-%d" as `dateformat`,
"%Y-%m-%d %H" as `dateformat`),
"%Y-%m-%d %H:%i" as `dateformat`) ....
Auch wenns kompliziert aussehen mag. Ist zu so etwas zu raten und würde es überhaupt klappen?
Leider deckt keine der Funktionen den Vollständigen Bereich ab, den ich haben will.
Am nähesten dran kommt denke ich timestampdiff ( MySQL :: MySQL 5.0 Reference Manual :: 11.6 Date and Time Functions ) Aber selbst hier müsste ich noch für jeden Fall testen, welcher zeitraum vorhanden ist. Mit Zeiträumen habe ich leider nichts gefunden. Wenn da wer was weiß bitte schreiben Bin für jede Hilfe dankbar =)
Ok. Vielen dank für die Meinung. Hab auch schon überlegt ob es überhaupt sinnvoll ist, alles auf Mysql Seite zu machen. Denke da ist es erheblich besser 2 Request zu machen als nur einen und die ganzen „If Operationen“ PHP zu überlassen
Falls irgendwer vom Gegenteil überzeugt ist, einfach schreiben. Bin immer offen für neue Dinge. Da meine SQL-Kenntnisse nicht all zu gut sind, lasse ich mich da immer gerne eines Besseren belehren