ChrisB: Zeitperioden vergleichen mit MySQL und PHP + Zend Framework

Beitrag lesen

Hi,

Du solltest dringend darüber nachdenken, das Design der Datenbank dahingehend zu ändern, dass Du Start- und Enddatum als echtes Datum speicherst, und in einer weiteren Spalte die "Frequenz" der Wiederholung: "monatlich/jährlich/keine Wiederholung".

Stimmt, „echte“ Datumsangaben wären auf jeden Fall vorzuziehen.

Und auch dabei sind Wildcards für Jahr und Monat nicht besonders schwer umzusetzen - wenn man die Info, ob Jahr/Monat frei sein sollen, in einer zusätzlichen Spalte ablegt. Das könnten bspw. Spalten vom Typ Boolean/Tinyint sein, in die man einfach eine 0 reinschreibt für „ist nicht variabel“ und eine 1 für „variabel“.

Damit kann man sich größeren logischen Aufwand beim dynamischen Generieren der Query ersparen, in dem man einfach Bedingungen in der Art
WHERE (YEAR(datensatzdatum) = '2010' OR yearisvar) AND (MONTH(datensatzdatum) = '07' OR monthisvar)
formuliert - wenn in den Spalten yearisvar/monthisvar jeweils 0 oder 1 drin steht, ist der Kuchen an der Stelle damit schon gegessen.

Das angeregte Design wäre dabei leichter (weil eindeutig) zu interpretieren, und flexibler, weil die Wiederholungsintervalle nicht das Datenbankdesign beeinflussen - etwa wöchentliche Wiederholungen könnten ohne weiteres eingeführt werden, wenn gewünscht.

Nun, die werden nach wie vor etwas mehr Rechenaufwand/Abfragelogik erfordern - oder hast du da schon eine Logik im Sinn, wie das umzusetzen wäre?

Für jeden Datensatz: Nimm das Startdatum und addiere dazu die maximale Anzahl an Wiederhlungsintervallen (d.h. Monaten/Jahren/..., je nach "Wiederholungsfrequenz"), so dass das Ergebnis kleiner ist als das Startdatum des eingegebenen Intervalls.

Soll das innerhalb der Query/in SQL passieren, oder siehst du das als vorgelagerte Logik, die im Script (PHP) untergebracht werden soll?

Für die Implementierung wirst Du es zu schätzen wissen, wenn Du es mit echten Daten zu tun und die Datumsfunktionen des DBMS zu Verfügung hast.

Ja, ich schätze auch.

MfG ChrisB

--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]