Announcement

Collapse
No announcement yet.

Select-Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Select-Abfrage

    Hallo zusammen,

    ich habe hier eine fertige Kalenderanwendung, deren Daten in einer MYSQL-Datenbank abgelegt werden. Nun möchte ich eine Tabelle aller Termine ausgeben, die in der Zukunft liegen. Nun ist das Datum des Termins in der Datenbanktabelle dummerweise nicht ein einem Feld des Datentyps DATE abgelegt, sondern setzt sich aus drei Feldern des Datentyps TINYINT, bzw SMALLINT zusammen.

    Hier der Aufbau der Tabelle:

    id, Text, Jahr, Monat, Tag


    Wie oben schon beschrieben brauche ich eine Select-Abfrage, die mir alle Termine in der Zukunft ausgibt. Das aktuelle Datum liegt über die Variablen:
    $today-year, $today-month und $today-day

    Probiert habe ich zunächst:
    SELECT *
    FROM calendar
    WHERE
    Jahr >= $today-year AND
    Monat >= $today-month AND
    Tag >= $today-day


    Hier fehlen dann aber natürlich alle Termine, die zwar in der Zukunft jedoch an einer kleineren Tagesnummer als aktuell ist raus, was ich nicht möchte.
    Es sollen allerdings jedoch alle Termine nicht mehr angezeigt werden, die an vergangenen Tagen liegen...

    Vermutlich ist das ganze nur eine Kleinigkeit. Aber im Moment bin ich echt schon am Verzeifeln.

    Besten Dank schon einmal für die Hilfe!

    Gruß
    Jens

  • #2
    Auch hallo.

    Man kann sich auch die Befehle "MODIFY" und "ALTER" etwas genauer betrachten, um den Datentyp einer Spalte zu verändern. Im konkreten Fall könnte man eine richtige Datumspalte einfügen (ungetestet):
    ALTER TABLE <Name der Tabelle> ADD
    datum DATE

    Eventuell müssen auch Klammern gesetzt werden: ( datum DATE)

    Gruss
    MfG
    Cheat-Sheets for Developers / Programming Quotes

    Comment


    • #3
      Hallo,

      daran hatte ich auch schon gedacht. Jedoch würde dann der Rest der Kalenderapplikation nicht mehr laufen. Und hier habe ich keine Lust die ganze Geschichte entsprechend umzuprogrammieren.

      Allerdings ist mir jetzt eine andere Lösung beim Einkaufen eingefallen:

      SELECT *
      FROM calendar
      WHERE
      Jahr > $today-year OR
      (Jahr = $today-year AND
      Monat > $today-month) OR
      (Jahr = $today-year AND
      Monat = $today-month AND
      Tag > $today-day)

      Das Ding bewirkt folgendes:
      Zunächst landen alle Termine, die im nächsten Jahr liegen in der Ergebnisliste, was sicherlich richtig ist.
      Danach folgen diesen Jahres, die in noch kommenden Monaten liegen, was auch richtig ist.
      Danach wiederum folgen die Termine, die in diesem Jahr, dem aktuellen Monat und in den restlichen Tagen des Monats liegen.

      Voilà: Alle zukünftigen Termine.

      Prinzipiell ist natürlich die Variante mit einem gescheiten Datumsfeld in der Datenbank eleganter

      Danke für die Hilfe!
      Jens

      Comment

      Working...
      X