• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

MySQL - Werte von verschiedenen Zeiträume aufsummieren, aber wie??

stebner

New member
Hallo,

Ich bin dabei ein Saunabuchungssystem zu schreiben, mit dem man eine Sauna

reservieren kann.
Diese Sauna hat aber nur eine bestimmte Kapazität, sagen wir 10 Leute gleichzeitig.

Die Buchungen will ich in einer MySQL DB verwalten u.a. mit folgenden Einträgen:

entweder:
AnfangsZeit(DATETIME), EndZeit(DATETIME), AnzahlNutzer(INTEGER)

oder:
AnfangsZeit(DATETIME), Dauer(TIME), AnzahlNutzer(INTEGER)

Beispieleintrag:
Anfang Ende NutzerAnz
2008-08-01 14:02:00 2008-08-01 14:08:00 5
2008-08-01 14:06:00 2008-08-01 14:16:00 3
2008-08-01 14:03:00 2008-08-01 14:09:00 2
2008-08-01 14:02:00 2008-08-01 14:07:00 3

Als Ausgabe brauche ich eine Auflistung aller Zeiträume, mit der Summe ihrer Nutzer

im jeweiligen Zeitraum.
Also z.B.
Anfang Ende NutzerAnz
2008-08-01 14:02:00 2008-08-01 14:03:00 8
2008-08-01 14:03:00 2008-08-01 14:06:00 10
2008-08-01 14:06:00 2008-08-01 14:07:00 10
2008-08-01 14:07:00 2008-08-01 14:08:00 10
2008-08-01 14:08:00 2008-08-01 14:09:00 2
2008-08-01 14:09:00 2008-08-01 14:16:00 3
(wenn das so richtig im Kopf aufsummiert ist)

geht sowas irgendwie mit MySQL?
wenn ja, habt Ihr ne Ahnung wie man sowas bauen könnte?
habe bereits das Manual studiert und in Foren gesucht, bisher ohne Erfolg.
Gruß, stebner
 
vielleicht hätte ich in der ausgabe lieber schreiben sollen:

Anfang Ende NutzerAnz
2008-08-01 14:02:00 2008-08-01 14:02:59 8
2008-08-01 14:03:00 2008-08-01 14:05:59 10
2008-08-01 14:06:00 2008-08-01 14:06:59 10
...

Die Ausgabe ist ja hier sortiert nach Zeit.
14:02:00-14:02:59 | 14:03:00 - 14:05:59 | 14:06:00 ...
Das soll nachher praktisch ein geordneter langer Zeitstrahl werden, der mir nahtlos zu jedem dieser Teil-Zeitabschnitte die jeweilige Nutzeranzahl-Summe anzeigt.

Wenn sich die Zeiträume nicht überlappen, sind halt Lücken im Zeitstrahl in denen NutzerAnz = 0 ist, macht ja nix.
 
Die Anzahl der Benutzer ist doch irgendwie ableitbar aus der Anzahl der Buchungsdatensätze eines Zeitraumes. Das extra zu speichern wäre irgendwie redundant, oder?
 
Ein Benutzer kann ja für mehrere Personen buchen, alternativ könnte man pro Person einen Buchungssatz anlegen. Solche Intervall-Anfragen unterstützt MySQL soweit ich weiß nicht. Dass heißt du musst dir da etwas komplizierteres basteln. Wenn du hier mal nen SQL-Dump mit nen paar Daten zum rumbasteln reinstellst, würde ich mich übers Wochenende mal ransetzen.
 
Für alle zukünftigen Google-Surfer, die auf diesen Eintrag stoßen:
Ich habe das ganze jetzt mit Hilfe von 4 Views gelöst:

<?php

SELECT Anfang, Ende, NutzerAnz FROM `buchung` order by Anfang

'2008-08-20 14:00:00', '2008-08-20 15:00:00', 2
'2008-08-21 13:00:00', '2008-08-21 14:00:00', 3
'2008-08-21 14:00:00', '2008-08-21 15:00:00', 3
'2008-08-21 14:20:00', '2008-08-21 14:40:00', 3
'2008-08-21 14:25:00', '2008-08-21 15:00:00', 1
'2008-08-21 14:39:00', '2008-08-21 15:50:00', 3
'2008-08-21 15:10:00', '2008-08-21 16:00:00', 2
'2008-09-12 18:00:00', '2008-09-12 19:00:00', 2

#===================================================

create view view1 as
SELECT Anfang, NutzerAnz FROM buchung UNION
SELECT Ende, NutzerAnz*-1 FROM buchung

'2008-08-21 14:39:00', 3
'2008-08-20 14:00:00', 2
'2008-08-21 13:00:00', 3
'2008-08-21 14:00:00', 3
'2008-08-21 14:20:00', 3
'2008-08-21 14:25:00', 1
'2008-09-12 18:00:00', 2
'2008-08-21 15:10:00', 2
'2008-08-21 15:50:00', -3
'2008-08-20 15:00:00', -2
'2008-08-21 14:00:00', -3
'2008-08-21 15:00:00', -3
'2008-08-21 14:40:00', -3
'2008-08-21 15:00:00', -1
'2008-09-12 19:00:00', -2
'2008-08-21 16:00:00', -2

#===================================================

create view view2 as
Select c.Anfang AS Anfang, SUM(c.NutzerAnz) AS Summe
FROM view1 c GROUP BY c.Anfang ORDER BY c.Anfang

'2008-08-20 14:00:00', 2
'2008-08-20 15:00:00', -2
'2008-08-21 13:00:00', 3
'2008-08-21 14:00:00', 0
'2008-08-21 14:20:00', 3
'2008-08-21 14:25:00', 1
'2008-08-21 14:39:00', 3
'2008-08-21 14:40:00', -3
'2008-08-21 15:00:00', -4
'2008-08-21 15:10:00', 2
'2008-08-21 15:50:00', -3
'2008-08-21 16:00:00', -2
'2008-09-12 18:00:00', 2
'2008-09-12 19:00:00', -2

#===================================================

create view view3 as
SELECT a.Anfang,
(SELECT SUM(b.NutzerAnz)
FROM view1 b WHERE b.Anfang <= a.Anfang) AS Summe
FROM view2 a

'2008-08-20 14:00:00', 2
'2008-08-20 15:00:00', 0
'2008-08-21 13:00:00', 3
'2008-08-21 14:00:00', 3
'2008-08-21 14:20:00', 6
'2008-08-21 14:25:00', 7
'2008-08-21 14:39:00', 10
'2008-08-21 14:40:00', 7
'2008-08-21 15:00:00', 3
'2008-08-21 15:10:00', 5
'2008-08-21 15:50:00', 2
'2008-08-21 16:00:00', 0
'2008-09-12 18:00:00', 2
'2008-09-12 19:00:00', 0

#===================================================

create view view4 as
SELECT a.Anfang,
(SELECT MIN(b.Anfang)
FROM view3 b
WHERE b.Anfang > a.Anfang) - INTERVAL 1 SECOND AS Ende,
a.Summe
FROM view3 a

'2008-08-20 14:00:00', '2008-08-20 14:59:59', 2
'2008-08-20 15:00:00', '2008-08-21 12:59:59', 0
'2008-08-21 13:00:00', '2008-08-21 13:59:59', 3
'2008-08-21 14:00:00', '2008-08-21 14:19:59', 3
'2008-08-21 14:20:00', '2008-08-21 14:24:59', 6
'2008-08-21 14:25:00', '2008-08-21 14:38:59', 7
'2008-08-21 14:39:00', '2008-08-21 14:39:59', 10
'2008-08-21 14:40:00', '2008-08-21 14:59:59', 7
'2008-08-21 15:00:00', '2008-08-21 15:09:59', 3
'2008-08-21 15:10:00', '2008-08-21 15:49:59', 5
'2008-08-21 15:50:00', '2008-08-21 15:59:59', 2
'2008-08-21 16:00:00', '2008-09-12 17:59:59', 0
'2008-09-12 18:00:00', '2008-09-12 18:59:59', 2
'2008-09-12 19:00:00', '', null
 
Zurück
Oben