Preisberechnung mit Saisonzeiten

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

  • Preisberechnung mit Saisonzeiten

    Hallo zusammen,

    ich brauche eure Hilfe!

    Ich habe eine DB in der Saisozeiten zu einem Reiseziel gespeichert werden.
    Datumsformat ist DATETIME in der DB.

    Dort wird das Start bzw. Enddatum einer jeden Saison gesichert.

    Saison A (2014-01-01/2014-06-22)
    Saison B (2014-06-23/2014-08-02)
    Saison C (2014-08-03/2014-12-31)

    Der User kann anfangs ein Anreisedatum wählen. Nehmen wir den 26.07.2014 an und eine Reisedauer von 14 Tagen. Somit liegt die Reise in Saison B(7 Tage) und C (7 Tage).

    So jetzt das eigentlich Problem. Wie kann ich es realisieren, dass nun nur 7 Tage aus Saison B abgefragt werden und die weiteren 7 Tage aus Saison C?

    Ich stehe sowas von auf dem Schlauch! BETWEEN fällt ja weg?

  • #2
    Ich versteh nicht ganz, was du möchtest. Wie sieht das gewollte Ergebnis der Datenbankabfrage aus?

    Kommentar


    • #3
      Naja steht ja da. Ich brauche eine Abfrage die mir Ergebnisse Saisonübergreifend liefert.

      Kommentar


      • #4
        Und wie sieht so ein Ergebnis aus? Und wie sieht die Datenstruktur aus?

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          Und wie sieht so ein Ergebnis aus? Und wie sieht die Datenstruktur aus?
          Ergebnis suche ich ja.

          Struktur:
          Id int 11
          Name
          Beginn datetime
          Ende datetime

          Beginn ist das Startdatum einer saison

          Kommentar


          • #6
            Zitat von nitroox Beitrag anzeigen
            Ergebnis suche ich ja.
            Als Programmierer musst du ja eine Vorstellung davon haben, wie das Ergebnis aussehen muss. Und das poste bitte.

            Kommentar


            • #7
              Zitat von h3ll Beitrag anzeigen
              Als Programmierer musst du ja eine Vorstellung davon haben, wie das Ergebnis aussehen muss. Und das poste bitte.
              Wie oben bereits geschrieben habe ich in der DB, 3 Saisonzeinte mit Start bzw. Enddatum im DATETIME Format.

              Der User wählt anfangs ein Datum aus z.b. 26.07.2014 mit einer Reisedauer von 14 Tagen.

              Somit würde in diesem Fall 7 Tage in die Saison 1 fallen und 7 Tage in die 2 Saison.

              Ich möchte lediglich die Ausgabe der Tage in der jeweiligen Saison haben, damit ich diese für die Preisabfrage weiterverwenden kann.

              Kommentar


              • #8
                Zitat von nitroox Beitrag anzeigen
                Wie oben bereits geschrieben habe ich in der DB, 3 Saisonzeinte mit Start bzw. Enddatum im DATETIME Format.

                Der User wählt anfangs ein Datum aus z.b. 26.07.2014 mit einer Reisedauer von 14 Tagen.

                Somit würde in diesem Fall 7 Tage in die Saison 1 fallen und 7 Tage in die 2 Saison.
                Bitte nicht beschreiben, sondern das Ergebnis posten! Das sagt mehr als 1000 Worte.

                Zitat von nitroox Beitrag anzeigen
                Ich möchte lediglich die Ausgabe der Tage in der jeweiligen Saison haben, damit ich diese für die Preisabfrage weiterverwenden kann.
                Und ich kann mir überhaupt nicht vorstellen, was du darunter verstehst. Also bitte das gewünschte Ergebnis posten!

                Kommentar


                • #9
                  Zitat von h3ll Beitrag anzeigen
                  Bitte nicht beschreiben, sondern das Ergebnis posten! Das sagt mehr als 1000 Worte.



                  Und ich kann mir überhaupt nicht vorstellen, was du darunter verstehst. Also bitte das gewünschte Ergebnis posten!
                  Das Ergebnis steht doch da? Die Abfrage fehlt ja bzw. Der Weg zum Ergebnis.
                  Das ist ja der Punkt wo ich Hilfe brauche.

                  Ergebnis wäre :

                  Saison 1: 7tage
                  Saison 2: 7tage

                  Dies ist wichtig da die Saisonzeiten verschiedene Preise haben

                  Kommentar


                  • #10
                    Ich würde vorschlagen, du überlegst dir erst mal eine Query die ermittelt, in welche Saisons die Buchung überhaupt fällt, das ist nicht so schwierig – wenn dir nicht klar ist, welche Überschneidungen zwischen Start- und Enddatum der Buchung und der Saisons zu überprüfen sind, dann male dir die möglichen Fälle mal auf ein Blatt Papier auf.

                    (Wie viele Tage es pro Saison sind, darüber kann man sich dann anschließend Gedanken machen.)
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Code:
                      CREATE TABLE season (
                        id int(11) NOT NULL AUTO_INCREMENT,
                        label char(1) NOT NULL,
                        begin_date date NOT NULL,
                        end_date date NOT NULL,
                        PRIMARY KEY (id)
                      ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
                      
                      INSERT INTO season (id, label, begin_date, end_date) VALUES
                      (1, 'A', '2014-01-01', '2014-06-22'),
                      (2, 'B', '2014-06-23', '2014-08-02'),
                      (3, 'C', '2014-08-03', '2014-12-31');
                      Code:
                      mysql> SET @begin_day = DAYOFYEAR('2014-07-26');
                      Query OK, 0 rows affected (0.00 sec)
                      
                      mysql> SET @end_day = @begin_day + 14;
                      Query OK, 0 rows affected (0.00 sec)
                      
                      mysql> SELECT
                          ->     label,
                          ->     (
                          ->         DAYOFYEAR(end_date)
                          ->         - (DAYOFYEAR(begin_date) - 1)
                          ->         - IF((DAYOFYEAR(begin_date) - 1) < @begin_day, @begin_day - DAYOFYEAR(begin_date) + 1, 0)
                          ->         - IF(DAYOFYEAR(end_date) > @end_day, DAYOFYEAR(end_date) - @end_day, 0)
                          ->     ) AS count_days
                          -> FROM
                          ->     season
                          -> HAVING
                          ->     count_days > 0;
                      +-------+------------+
                      | label | count_days |
                      +-------+------------+
                      | B     |          7 |
                      | C     |          7 |
                      +-------+------------+
                      2 rows in set (0.00 sec)

                      Kommentar


                      • #12
                        @h3ll

                        Deine Lösung dürfte bei einem jahresübergreifendem Reisedatum noch Probleme bereiten.
                        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


                        • #13
                          Hat denn vielliecht noch jemand eine Idee?

                          Kommentar


                          • #14
                            Ich hab eine funktionierende Lösung in der Schublade und h3ll ist mit Sicherheit auch in der Lage das Jahresproblem zu lösen.

                            Wie sieht es mit eigenen Versuchen von dir aus?
                            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


                            • #15
                              Zitat von Quetschi Beitrag anzeigen
                              Ich hab eine funktionierende Lösung in der Schublade und h3ll ist mit Sicherheit auch in der Lage das Jahresproblem zu lösen.

                              Wie sieht es mit eigenen Versuchen von dir aus?
                              Ich denke, dass ich dem ganzen zu kompliziert dran gehe.

                              Derzeit gehe ich mit einer for-schleife alles durch und zähle eine Variable hoch... Aber nicht die feine Art denke ich

                              Kommentar

                              Lädt...
                              X