Abfrage Urlaubsmeldungen

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

  • Abfrage Urlaubsmeldungen

    Guten Tag,
    ich habe eine Funktion in die Mitglieder ihre Abwesenheitszeiten eintragen: Also Start & Ende jeweils in dem Format YYYY-MM-DD

    Jetzt möchte ich die Möglichkeit bieten abzufragen, wer in einem variablen Zeitfenster unterwegs ist. Dazu übergebe ich in einem Formular die Werte $StartPrint und $EndePrint

    Meine Abfrage sah dann so aus
    PHP-Code:
    $sql "SELECT * FROM TUrlaub WHERE 
    Ende <= '
    $EndePrint' AND Start >= '$StartPrint' ORDER BY Start ASC"
    Jetzt stelle ich aber fest, dass die Abfrage mir nur die liefert, die zu 100% in dem per Formular übergebenen Zeitfenster liegen. Alle, die nur teilweise reinpassen werden nicht angezeigt.

    Beispiel:
    Auswahl von 01.07.2008 bis 30.07.2008
    Kollege A 03.07.2008 bis 29.07.2008
    Kollege B 05.07.2008 bis 12.07.2008
    Kollege C 09.07.2008 bis 11.07.2008

    Nicht angezeigt werden
    Kollege D 20.06.2008 bis 12.07.2008
    Kollege E 29.06.2008 bis 12.08.2008


    Ich hatte die Abfrage mal auf
    PHP-Code:
    SELECT FROM TUrlaub WHERE 
    Start 
    OR Ende BETWEEN '$EndePrint' AND '$StartPrint' ORDER BY Start ASC 
    geändert. Erfolglos.

    Habt Ihr eine Idee??

  • #2
    PHP-Code:

    SELECT 
    FROM TUrlaub WHERE 
    (Start BETWEEN '$StartPrint' AND '$EndePrint') OR 
    (
    Ende BETWEEN '$StartPrint' AND '$EndePrint'
    ORDER BY Start ASC 
    du wolltest werte die zwischen 9 und 6 liegen, muss aber heißen zwischen 6 und 9
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      leider klappt es so nicht:

      Auswahl von 01.07.2008 bis 04.07.2008
      Kollege A 03.07.2008 bis 29.07.2008

      Die Kollegen
      Kollege D 20.06.2008 bis 12.07.2008
      Kollege E 29.06.2008 bis 12.08.2008
      werden nicht angezeigt.
      Zuletzt geändert von webdream; 01.07.2008, 10:28.

      Kommentar


      • #4
        keiner ne Idee??

        Kommentar


        • #5
          Du postest nichtmal die Query und bist nach drei Stunden am drängeln? Was erwartest du? Dass wir deine Arbeit machen?

          Kommentar


          • #6
            Doch schon. Bloß ist um die Uhrzeit ja noch keiner da.
            Code:
            SELECT * FROM `kollege` 
            WHERE start >= '2008-07-01'
            AND end <= '2008-07-30'
            Diese Abfrage passt schon so wie sie ist. Nur Leute die zu 100% darin liegen, werden dann ausgegeben.

            Welchen Datentyp haben denn die Spalten Ende und Start.
            Sie müssen genauso vorliegen wie $StartPrint, $EndPrint.
            Code:
            Also Start & Ende jeweils in dem Format YYYY-MM-DD
            Also passenderweise im DATE-Format.

            Code:
            12.07.2008  > 2008-08-17
            Sowas geht nicht. Zumindestens ging es bei mir noch nie so.

            du wolltest werte die zwischen 9 und 6 liegen, muss aber heißen zwischen 6 und 9
            Wo is denn da der Unterschied?
            Assembler ist eine Methode,
            Programme, die zu langsam laufen,
            so umzuschreiben,
            dass sie überhaupt nicht mehr laufen.

            Kommentar


            • #7
              Sei T1a und T2a jeweils der Beginn, T1e und T2e die Enden zweier Zeitspannen Z1 und Z2, so dass T1a < T1e und T2a < T2e gilt.
              Folgende Verhältnisse der beiden Zeitspannen zueinander sind möglich (nicht disjunkte Fälle):
              a) Z1 liegt vollständig vor Z2: T1e < T2a
              b) Z1 liegt teilweise vor Z2: T1a < T2a und T1e > T2a
              c) Z1 liegt vollständig in Z2: T2a < T1a und T1e < T2e
              d) Z1 liegt teilweise nach Z2: T1a < T2e und T1e < T2e
              e) Z1 liegt vollständig nach Z2: T2e < T1a

              Dich interessieren nur überlappende Zeitspannen, also die Falle b bis d. Die Where-Klausel muss so aussehen:
              (T1a < T2a AND T1e > T2a) OR
              (T2a < T1a AND T1e < T2e) OR
              (T1a < T2e AND T1e < T2e)

              Das kann man noch Vereinfachen. Aber das überlasse ich dir.
              Du solltest dir auch Gedanken über die Bereichsgrenzen machen. Was passiert, wenn Tix = Tjy ist?

              Kommentar

              Lädt...
              X