Zitat von Quetschi
Beitrag anzeigen
Preisberechnung mit Saisonzeiten
Einklappen
X
-
Jap - wie gesagt, es geht darum zu ermitteln in welcher Saison die Anreise liegt - also nächstes analog dazu die Saison in der die Abreise liegt.
Du kannst natürlich auch BETWEEN einsetzen wie in h3lls Code vorgeschlagen, was auch etwas eleganter ist, da du dann das Anreisedatum nur einmal verwenden musst. Evtl. kann mysql damit die Abfrage sogar effizienter durchführen - das weiß ich jetzt grad nicht.Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Kommentar
-
Code:SET @begin_day = '2014-06-22'; SET @end_day = '2014-07-07'; SELECT label, begin_date, end_date, @begin_day, @end_day, if( @begin_day >= begin_date AND @end_day <= end_date , DATEDIFF(@end_day, @begin_day) + 1, 0 ) as case1, if( @begin_day >= begin_date AND @begin_day <= end_date AND @end_day > end_date , DATEDIFF(end_date, @begin_day) + 1, 0 ) as case2, if( @begin_day < begin_date AND @end_day >= begin_date AND @end_day <= end_date , DATEDIFF( @end_day , begin_date) + 1, 0 ) as case3, if( @begin_day < begin_date AND @end_day > end_date , DATEDIFF( end_date, begin_date) + 1, 0 ) as case4, ( 0 + if( @begin_day >= begin_date AND @end_day <= end_date , DATEDIFF(@end_day, @begin_day) + 1, 0 ) + if( @begin_day >= begin_date AND @begin_day <= end_date AND @end_day > end_date , DATEDIFF(end_date, @begin_day) + 1, 0 ) + if( @begin_day < begin_date AND @end_day >= begin_date AND @end_day <= end_date , DATEDIFF( @end_day , begin_date) + 1, 0 ) + if( @begin_day < begin_date AND @end_day > end_date , DATEDIFF( end_date, begin_date) + 1, 0 ) ) as count_days FROM season HAVING count_days > 0
Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Kommentar
-
Zitat von Quetschi Beitrag anzeigenCode:SET @begin_day = '2014-06-22'; SET @end_day = '2014-07-07'; SELECT label, begin_date, end_date, @begin_day, @end_day, if( @begin_day >= begin_date AND @end_day <= end_date , DATEDIFF(@end_day, @begin_day) + 1, 0 ) as case1, if( @begin_day >= begin_date AND @begin_day <= end_date AND @end_day > end_date , DATEDIFF(end_date, @begin_day) + 1, 0 ) as case2, if( @begin_day < begin_date AND @end_day >= begin_date AND @end_day <= end_date , DATEDIFF( @end_day , begin_date) + 1, 0 ) as case3, if( @begin_day < begin_date AND @end_day > end_date , DATEDIFF( end_date, begin_date) + 1, 0 ) as case4, ( 0 + if( @begin_day >= begin_date AND @end_day <= end_date , DATEDIFF(@end_day, @begin_day) + 1, 0 ) + if( @begin_day >= begin_date AND @begin_day <= end_date AND @end_day > end_date , DATEDIFF(end_date, @begin_day) + 1, 0 ) + if( @begin_day < begin_date AND @end_day >= begin_date AND @end_day <= end_date , DATEDIFF( @end_day , begin_date) + 1, 0 ) + if( @begin_day < begin_date AND @end_day > end_date , DATEDIFF( end_date, begin_date) + 1, 0 ) ) as count_days FROM season HAVING count_days > 0
Kommentar
-
Ja - bis auf das mit dem SET @begin_day und SET @end_day
In der Praxis baust du die Query wahrscheinlich einfach per PHP mit entsprechend eingesetzten Variablen für An- und Abreise zusammen.
EDIT:
@begin_day, @end_day sowie die if-blöcke, deren ergebnisse als case1, case2 usw. ausgegeben werden, brauchst du normalerweise nicht - ich hab sie dir zur Veranschaulichung eingebaut, damit du siehst, welche Saison wegen welcher Bedingung in die Berechnung eingeflossen ist.Zuletzt geändert von Quetschi; 29.07.2014, 22:44.Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Kommentar
-
Zitat von Quetschi Beitrag anzeigenJa - bis auf das mit dem SET @begin_day und SET @end_day
In der Praxis baust du die Query wahrscheinlich einfach per PHP mit entsprechend eingesetzten Variablen für An- und Abreise zusammen.
EDIT:
@begin_day, @end_day sowie die if-blöcke, deren ergebnisse als case1, case2 usw. ausgegeben werden, brauchst du normalerweise nicht - ich hab sie dir zur Veranschaulichung eingebaut, damit du siehst, welche Saison wegen welcher Bedingung in die Berechnung eingeflossen ist.
habe das ganze jetzt mal ausprobiert.
er wirft mir aber z.B. 42 in case4 aus (Datum war. 11.7.14 - 19.7.14)
Kommentar
-
Bei mir kommt bei diesem Daten und den Saisonzeiten aus deinem Eröffnungspost 9 Tage in Saison B durch case1 raus, was auch korrekt ist.
Irgendwo hast du wohl einen Fehler beim übernehmen des Statements gemacht.Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
Schön - etwas Geschichte kann ja nicht schaden.
Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!
Kommentar
Kommentar