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

[MYSQL] Auslastung anzeigen

mo

Administrator
Teammitglied
Moin moin,
folgende Aufgabenstellung:
Ein Hotel hat eine MySQL-Datenbank mit An- und Abreise pro Gast (2015-05-01 - 2015-05-08).
Wie kann nun per Abfrage die Auslastung angezeigt werden, also wieviele Gäste pro Tag anwesend waren?
Ich komm von Ansatz her schon nicht auf nen grünen Zweig.
 
Wie ist denn die Tagesauslastung gespeichert? Also das DB Schema? Geht das pro Tag, pro Zimmer, pro wasweißich?
 
nein, zeiträume. pro gast eintritt und austritt, die tage dazwischen werden nicht erfasst, da sie sich ja aus dem ein- und austritt ergeben.
 
Dann würde ich pro gesuchtem Tag über alle Gäste iterieren, deren Eintritt <= gesuchter Tag und Austritt >= gesuchter Tag ist und pro Gast einen Zähler inkrementieren. Am Ende ist dann pro Tag das Auslastung KANN (KANN=Anzahl Betten minus die, die z.B. wg. Renovierung nicht nutzbar sind) minus Zähler an diesem Tag die gesuchte Auslastung. Wie man das in SQL übersetzt weiß ich nicht, vielleicht ist es trotzdem eine Hilfe.

Das "pro gesuchtem Tag" kann man natürlich auch auf Zeiträume formulieren mit Eintritt <= Anfang Auslastungsbetrachtung und Austritt >= Ende Auslastungsbetrachtung
 
so, endlich wieder etwas luft gehabt:

PHP:
while($start<=$end) { //Solange $start < $end
$i++;
echo $start."<br />"; //Gib $start aus
$start = date("Y-m-d",strtotime($start."+1 day")); //Zähle $start um einen Tag hoch
$query = "SELECT id FROM kunden WHERE anreise <= $start AND abreise >= $start"; echo $query."<br />";
}

ich würde gerne die auslastung anzeigen. ich habe eine mysql tabelle mit id, anreise, abreise.
$start wird von mysql ausgelesen und ist das erste anreisedatum in der tabelle. dann wird hochgezählt bis zum heutigen datum ($end).
in der schleife soll nun eine query gebaut werden, die prüft, ob das $start-datum zwischen anreise und abreise liegt. mit BETWEEN hab ichs nicht hingekriegt.
 
Zuletzt bearbeitet von einem Moderator:
Du solltest gleich in der DB summieren. Mit PDO, Prepared Statements und DateTime zu arbeiten ist auch nicht komplizierter.
PHP:
<?php
$dsn = 'mysql:dbname=test;host=localhost;charset=utf8';
$user = 'user';
$password = '*******';
$options = array(
  PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
  PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
);
$db = new PDO($dsn, $user, $password,$options);
//Anreisetag wird mitgerechnet, Abreisetag nicht
$sql = "SELECT COUNT(id) as anzgaeste FROM gaeste WHERE :curDay >= DATE(anreise) AND :curDay < DATE(abreise)";

$stmt = $db->prepare($sql);

$start = date_create("today -10 days");  //
$end = date_create("today");

for(;$start <= $end;$start->modify("+1 Day")){
  $strStart = $start->format('Y-m-d');
  $stmt->execute(array("curDay" => $strStart));
  $result = $stmt->fetch();
  echo $strStart." : ".$result->anzgaeste."<br>";
}

Ausgabe in etwa so (Minimaltabelle):
Code:
2015-07-19 : 0
2015-07-20 : 0
2015-07-21 : 1
2015-07-22 : 2
2015-07-23 : 1
2015-07-24 : 1
2015-07-25 : 0
2015-07-26 : 0
2015-07-27 : 0
2015-07-28 : 0
2015-07-29 : 0

LG jspit
 
Zuletzt bearbeitet:
Zurück
Oben