drv: Nächste Termin anzeigen

Hallo zusammen, ich bin gerade dran, für unseren Kulturverein, ein PHP und MySQL basiertes Management zu schreiben. Nun habe ich in der DB viele Termine.

Ich würde gerne immer den letzten Termin für noch einen Tag anzeigen lassen, danach den nächsten. Sollten zwei Termine aufeinander folgen, soll trotzdem nach dem oben beschriebenen Thema verfahren werden, also der letzte Termin angezeigt werden. Und wichtig wäre auch noch, das wenn kein bevorstehender Termin mehr da ist, immer der letzte angezeigt wird.

Mit mehreren Abfragen und der Hilfe von PHP ist das kein Problem, gibt es denn hierfür eine DB-basierte Möglichkeit?

Vielen Dank für Eure Hilfe
DRV

  1. Meine Herren,

    Mit mehreren Abfragen und der Hilfe von PHP ist das kein Problem, gibt es denn hierfür eine DB-basierte Möglichkeit?

    Mit Sicherheit, welches Datenbanksystem benutzt du? Wie sieht die Datenbankstruktur aus (im Falle von MySQL zum Beispiel die Tabellen)?

    1. Hi,
      erstmal vielen Dank für die Antwort....
      Bisher ist die Struktur relativ einfach aufgebaut (Anpassung werde ich denke ich nachher selber hinbekommen, muss ja noch nen bissel Anreiz bleiben ;-) ):

      ID | quarter_ID | Title | start_date

      Id - auto_increment
      quarter_ID - foreign key auf übergeordnete Tabelle, zuordnung zu Quartal
      Title - selbsterklärend
      start_date - als Date-Field

      hoffe das ist ausreichend.

      1000 Dank
      DRV

      1. Meine Herren,

        Id - auto_increment
        quarter_ID - foreign key auf übergeordnete Tabelle, zuordnung zu Quartal
        Title - selbsterklärend
        start_date - als Date-Field

        Der DATE-Typ erlaubt es nicht Uhrzeiten zu speichern, wenn die Uhrzeit für einen Termin relevant ist, müsstest du auf DATETIME oder TIMESTAMP umrüsten. Gibt es außerdem kein end_date für Termine?

        hoffe das ist ausreichend.

        Noch nicht ganz, jetzt nochmal zur Geschäftslogik:
        Möchtest du, dass immer der letzte Termin an einem bestimmten Tag angezeigt wird?
        Oder möchtest du bei mehrtägigen Terminen den letzten Tag ermitteln?
        Deine Beschreibung war ziemlich in dem Punkt ziemlich wirr.

        1. Hi,
          es wird niemals mehr als einen Termin pro Tag geben, die Zeiten sind immer die gleichen.(Klar kann es später auch andere Zeiten geben, ist aber erstmal irrelevant). Es gibt auch ein end-date für jeden Termin, aber auch das möchte ich hier nicht weiter erwähnen, nen bissel was möchte ich ja auch selber erledigen/erarbeiten. Mir fehlt nur überhaupt nen Ansatz, daher mein Thread.

          Ich möchte immer einen Tag lang den letzten Termin anzeigen lassen, danach immer den nächsten.

          Angenommen der Termin wäre immer Samstag, so möchte ich Sonntags noch den vergangenen Termin anzeigen, Montags soll dann der nächste angezeoigt werden.

          Danke für Deine Mühe

          1. Meine Herren,

            Angenommen der Termin wäre immer Samstag, so möchte ich Sonntags noch den vergangenen Termin anzeigen, Montags soll dann der nächste angezeoigt werden.

            Ah, das ist verständlicher ausgedrückt.

            DATEDIFF( start_date, CURDATE() )

            Damit erhälst du die Anzahl der Tage, die zwischen dem Termin-Beginn und dem aktuellen Datum liegen sind.
            Ein negativer Wert würde bedeuten, dass der Termin in der Vergangenheit liegt, ein positiver Wert steht entsprechend für einen zukünftigen Termin.

            Liste aller Date-Funktionen: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

            Hoffe das hilft dir weiter, ich überlasse dich erstmal dem Selbststudium, wenn du weitere Hilfe benötigst frag nur.

          2. Hi,

            mach mal bitte n Beispiel mit Beispieldaten in der Tabellenform und Beispielergebnissen. Was ist der Eingabewert? Das aktuelle Datum (also [heute] bzw. [jetzt])?

            Angenommen der Termin wäre immer Samstag, so möchte ich Sonntags noch den vergangenen Termin anzeigen, Montags soll dann der nächste angezeigt werden.

            Das klingt aber nach "wochenweiser" Logik?!

            Der zuletzt vorangegangene Termin fuer ein beliebiges Datum ist der erste Termin, dessen Datum kleiner als der Eingabewert ist, absteigend sortiert. In SQL Prosa etwa:
            WHERE start_date < $eingabe ORDER BY start_date DESC

            Der naechstfolgende Termin ist das Gegenteil, also etwa
            WHERE start_date > $eingabe ORDER BY start_date ASC

            Beide Abfragen lassen sich (sicherlich unter mySQL)

            • mittels LIMIT auf einen Datensatz beschraenken
            • mittels UNION zusammenfuegen

            Cheers, Frank

        2. Tach!

          Der DATE-Typ erlaubt es nicht Uhrzeiten zu speichern, wenn die Uhrzeit für einen Termin relevant ist, müsstest du auf DATETIME oder TIMESTAMP umrüsten.

          TIMESTAMP-Spalten sind ganz speziell für das Festhalten des aktuellen Zeitpunkts gedacht und sind deshalb auch mit der entsprechenden Magie ausgestattet, sich selbst mit der aktuelle Zeit auszufüllen oder sie beim Update zu ändern. TIMESTAMP sollten deshalb nicht für die Speicherung von beliebigen Datums- und Zeitwerten missbraucht werden, auch nicht wenn man diese Magie ausschaltet.

          dedlfix.