# SQL between - belgte bzw. freie Tage zwischen einem Zeitraum ermitteln



## creativeheadz (6. September 2013)

Hallo,
für ein Buchungssystem ist die Tabelle "bookings" wie folgt aufgebaut


```
BOOKING_ID | USER_ID | ITEM_ID | TIME_FROM   | TIME_TO      | HOST_ID

 1            1         1         09/07/2013    09/10/2013     2
 1            3         1         09/13/2013    09/15/2013     2
```

Ziel ist eine Abfrage, ob ein Zimmer im gwünschten Zeitraum schon belegt ist oder ob es noch frei ist.

Per POST sende ich Start und End Timestamp und Werte das ganze wie folgt aus.



```
$query = mysql_query("SELECT COUNT(BOOKING_ID) FROM bookings 
		
WHERE 

'".$timestamp_from."' BETWEEN TIME_FROM AND TIME_TO
		
OR '".$timestamp_to."' BETWEEN TIME_FROM AND TIME_TO");
```

Ich erhalte keine Fehlermeldung.

Als Ausgabe sollte ich die Anzahl aller Buchungen für dieses Zimmer erhalten. Ist ein Zeitraum noch nicht belegt, sollte eine 0 erscheinen.

Ich erhalte folgende Anzahl an ermittelten Buchungen bei:

09/07/2013 - 09/10/2013 = *1*
09/13/2013 - 09/15/2013 = *2*
09/11/2013 - 09/12/2013 = *0*

Diese Ausgabe ist soweit in Ordnung

Wenn ich beispielsweise folgende Zeiträume Abfrage erhalte ich immer 0

09/06/2013 - 09/10/2013 = *0* müsste eigentlich 1 sein
09/11/2013 - 09/15/2013 = *0* müsste eigentlich 1 sein
09/06/2013 - 09/16/2013 = *0* müsste eigentlich 2 sein

Also immer dann, wenn der Startzeitpunkt und Endzeitpunkt an einem noch nicht belegten Tag ist.

Ich scheine einen Fehler in meinem Query zu haben. Ich weiss nur leider nicht wo bzw. wie ich den Query besser aufbauen sollte.

Ich bitte um Hilfe

Gruß

c


----------



## Yaslaw (6. September 2013)

2 Perioden vergleichen ist nicht einfach. Ich habe vor einiger Zeit mal etwas dazu zusammengestellt:
MySQL Perioden vergleichen
Ev. hilft dir das weiter

Ergo etwa so

```
WHERE
    LEAST('{$timestamp_to}', TIME_TO) >= GREATEST('{$timestamp_from}', TIME_FROM)
```


----------



## creativeheadz (6. September 2013)

Überragend! Es funktioniert.


----------

