Preisberechnung mit Saisonzeiten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #46
    Zitat von Quetschi Beitrag anzeigen
    Genau.
    Sie liefert aber nur eine Saison, obwohl mein Zeitraum 2 Saisonzeiten betrifft?

    Kommentar


    • #47
      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


      • #48
        Weiß nicht so ganz was du meinst -.-

        Kommentar


        • #49
          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
          Kürzen wir das einfach mal ab hier - auf die Art siehst du auch, welcher Fall zutreffend war.
          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


          • #50
            Zitat von Quetschi Beitrag anzeigen
            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
            Kürzen wir das einfach mal ab hier - auf die Art siehst du auch, welcher Fall zutreffend war.
            Das packe ich dann alles in eine mysql_query()?

            Kommentar


            • #51
              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


              • #52
                Zitat von Quetschi Beitrag anzeigen
                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.
                hey,
                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


                • #53
                  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

                  Lädt...
                  X