Hi.
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“.
Ggf. ja, das wäre dann ein kleines bisschen anders, als ich es im Sinn hatte. Es kommt etwas drauf an, was Alexander genau will. Er hat es (sich) immer noch nicht wirklich klargemacht, was er denn haben will:
-
Was ist, wenn ich einen 31.*.* angebe? Wird dann bei Monaten mit < 31 Tagen jeweils der 1. des Folgemonats genommen? Oder sind nur Monate erlaubt, die 31 Tage haben?
-
Was ist, wenn ein Intervall vom 31.* bis 31.* geht? Sind dann nur Juli/August und Dezember/Januar als Monate erlaubt? Und wenn nicht, wird dann '31. März bis 31. April' als '31. März bis 1. Mai' interpretiert? Oder bis 30. April? Oder...?
etc. pp.
Wenn man die Anforderung mal *exakt* formuliert - und nicht nur bei jedem Nachfragen halt etwas exakter als vorher - dann ist man wohl im Grunde fast fertig. Aber wem sag ich das, Du hast ja dasselbe geschrieben; das geht eher an den guten Alex...
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?
Na ja, ist jetzt auch kein Hexenwerk:
Nehmen wir an, wir haben Einheiten (Wochen/Monate/Jahre/etc.) als Intervall im Datensatz (n wäre hier 1, ich würde dazu neigen, algorithmisch erstmal beliebiges n hier zulassen zu wollen).
Dann nimmt man die Anzahl Einheiten der beiden Startdaten (etwa Anzahl Monate seit 1970 oder so), zieht sie voneinander ab, rundet auf ein ganzzahliges Vielfaches von n ab. Und wenn es bereits ein Vielfaches von n ist, muss man noch prüfen, ob man noch n abziehen muss oder nicht.
Die ermittelte Anzahl Einheiten addiert man zum Enddatum des Datensatzes und vergleicht mit dem Enddatum des Eingabeintervalls.
Soll das innerhalb der Query/in SQL passieren, oder siehst du das als vorgelagerte Logik, die im Script (PHP) untergebracht werden soll?
Ich würds in SQL machen. Wird vielleicht ein etwas sperriger Ausdruck, aber ich sehe keine größeren Probleme. Du?
Viele Grüße,
der Bademeister