Originally posted by Quetschi
View Post
Preisberechnung mit Saisonzeiten
Collapse
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!
Comment
-
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!
Comment
-
Originally posted by Quetschi View PostCode: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
Comment
-
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.Last edited by Quetschi; 29-07-2014, 21: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!
Comment
-
Originally posted by Quetschi View PostJa - 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)
Comment
-
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!
Comment
Comment