SQL: Richtige Daten abfragen mit zwei Datumeingaben

Briefkasten

Erfahrenes Mitglied
Hallo,

ich der Benutzer kann auf der Homepage das Ankunftdatum und Abfahrt Datum eingeben.
Je nach Saison gibt es unterschiedliche Preise. In der DB ist eine Tabelle mit folgendender Struktur: saison_from, saison_to.

Jetzt muss ich die Richtige Saison mit den zwei Daten ermitteln. Ich hab das so gemacht:
date1 = 05.09.2007
date2 = 12.09.2007

select saison_from, saison_to, saisonid from ro_saison where saison_to > '12.09.2007' or saison_from > '12.09.2007'

Allerdings kommt mir das ziemlich falsch vor. Zumal ich das erste Datum auch gar nicht in der select abfrage drinnen hab.

Passt das so, oder hab ich etwas vergessen?
 
Hi

Hast du einen Operator vertauscht? Sollte das nicht so aussehen?
SQL:
select saison_from, saison_to, saisonid 
from ro_saison 
where saison_to > '12.09.2007' AND saison_from < '12.09.2007'
Alternativ kannst du vielleicht aus den Operator BETWEEN verwenden.

//EDIT
Die beiden Bedingungen müssen übrigens mit Und verknüpft werden (Query angepasst)
 
Es hat den anschein, dass für das eingeben Datum gar keine Saison def. ist. Allerdings habe ich davor eine überprüfung eingebaut ob eine Saison für das eingebene Datum vorhanden ist. Wahrscheinlich liegt hier der Fehler.

Code:
$saison_to = $db->mssqlfetcharray($db->mssqlquery("select top 1 saison_to from ro_saison order by saison_to asc"));
$saison_from = $db->mssqlfetcharray($db->mssqlquery("select top 1 saison_from from ro_saison order by saison_to desc"));

if(strtotime($_POST["date1"]) > strtotime($saison_to[0]["saison_to"]) || strtotime($_POST["date2"]) > strtotime($saison_from[0]["saison_from"]))
{
...fehler ausgeben
}

Edit: Die überprüfung stimmt jetzt.

Allerdings bekomme ich mit der derzeitigen abfrage nach der Saison viel zu viele Rückgaben. Den eigentlich Sollte nur eine Saison max. 2 zu treffen.

Beispielsweise für folgende Abfrage: SELECT saisonid FROM ro_saison WHERE saison_to > '15.12.2007' AND saison_from < '14.02.2008'

erhalte ich 4 Rückgabewerte.

In der Saisonstabelle sind folgende Saisonendef.

1 01.12.2007 00:00:00 21.12.2007 00:00:00 Vorsaison
2 05.01.2008 00:00:00 25.01.2008 00:00:00 Zwischensaison
6 22.12.2007 00:00:00 04.01.2008 00:00:00 Hauptsaison
7 26.01.2008 00:00:00 28.03.2008 00:00:00 Hauptsaison
8 29.03.2008 00:00:00 30.04.2008 00:00:00 Nachsaison
9 01.05.2008 00:00:00 30.11.2008 00:00:00 Sommersaison
 
Zuletzt bearbeitet:
Hi

Also wenn du als Ergebnis die ersten 4 Einträge (1, 2, 6, 7) erhälst, passt das Ergebnis zur Abfrage (soweit ich das überblicken kann).
Wenn du herausfinden willst, ob ein bestimmtest Datum in einer Saison liegt (bzw. in welcher), musst du bei von und bis auch das gleiche Datum eintragen
 
Gibt es eine Möglichkeit herauszufinden, in welcher Saison die Buchung am längsten "dauert"? Dann würde ich einfach dieses Saison verwenden.

Das kann man wahrscheinlich aber nur noch mit einer Funktion oder SP lösen denke ich.
 

Neue Beiträge

Zurück