[MySQL+PHP] Abfrage der Belegung

mkk-network

Member
13 August 2007
19
1
Hallo allerseits
ich habe zur Zeit ein Problem, bei dem ich nicht weiß, wie ich es auf einfache Weise lösen könnte.

Ausgangssituation:
Ich habe eine Tabelle mit Belegungen für verschiedene Räume. Es ist in der Tabelle per Timestamp vermerkt, an welchem Tag ein Kunde anreist und wann er abreist (das ganze musste ich mit Timestamps lösen, da ich nachher mit den Daten rechnen muss).
Jetzt möchte ich anhand der verschiedenen Einträge ermitteln, bei welchem Eintrag an welchen Tagen eine Überbelegung vorliegt.

Beispiel:
Kapazität liegt bei 3 Räumen
id | anreise | abreise
1 | 12.3. | 14.3.
2 | 10.3. | 16.3.
3 | 11.3. | 12.3.
4 | 14.3. | 16.3.
5 | 11.3. | 18.3.
Ergebnis:
id1 überbucht 12.3., 14.3.
2 überbucht 12.3.
3 überbucht 12.3.
4 überbucht 14.3.
5 überbucht 12.3, 14.3.
(hoffe meine berechnungen waren auf die schnelle richtig und ich habe keine Überbuchung vergessen...)


Wie kann ich dieses Problem lösen? Am liebsten wäre mir ja eine Lösung per MySQL. Ganz optimal wäre es, wenn ich die Datensätze abrufe und direkt geliefert bekomme, wann überbucht ist. Fürchte aber dass das nicht geht... Habt ihr sonst ne Idee, wie ich das lösen kann ohne den Server allzusehr zu belasten?


MfG
terk
 
Eingentlich macht man das mit Triggern... beim Einfügen zu prüfen ist bedeutend einfacher als danach. (Bzw trigger braucht man nicht wirklich das prüfen kann man auch auf Anwendungsebene realisieren)

Für danach fällt mir jetzt spontan keine sinnvolle Lösung ein, nur eine etwas brachiale. Du nimmst Datum X und rufst alle Buchungenen ab die mit auf dem Datum liegen... wenns mehr als 3 sind hast du eine Überbuchung. Das ganze Packst du in eine Schleife und durchläufst das für x Tage. (Im idealfall bis MAX(abreise))

Zb

PHP:
SELECT
    COUNT(*)
FROM
    buchung
WHERE
    anreise <= 'DEM_DATUM' AND
    abreise >= 'DEM_DATUM'
 
Mit der Tabellenstruktur fällt mir da auch nix ein.

Ich würde vorschlagen, du machst noch eine weitere Tabelle. In dieser speicherst du für jeden Tag die Anzahl der Belegungen. Das ist beim Einfügen oder Löschen einer Buchung etwas mehr arbeit, aber dafür hast du die Daten dann sofort da.

Tabelle TagBelegung: tag | anzahl
Für den ersten dann
12.3. | 1
13.3. | 1
14.3. | 1
Für den zweiten
10.3. | 1
11.3. | 1
12.3. | 2 (update)
13.3. | 2 (update)
...

tag wäre dabei primary key (als DATE). Und man kann schön das insert ... on duplicate key nutzen (glaube das heißt so).
Evtl. geht das ganze sogar mit einer Stored Procedure. Aber da kenn ich mich nicht so gut mit aus.
 
Hey Leute
erstmal danke für die Antworten. Das direkte Prüfen beim Eintragen geht nicht, da Eintragungen trotz überbuchungen zugelassen werden sollen. Erst bei der Genehmigung soll das auffallen...
Denke werde die Version mit der 2. Tabelle nehmen.

Aber falls wem noch was schöneres einfällt, kann er hier ja posten :)