Schrift
[thread]11447[/thread]

Strategie für Terminplaner gesucht

Leser: 1


<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten
Froschpopo
 2008-03-10 18:05
#106893 #106893
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich möchte einen Terminplaner realisieren.
Dazu errichte ich eine Tabelle folgender Definition:
Code: (dl )
1
2
3
4
5
6
id MEDIUMINT(8) AUTO_INCREMENT NOT NULL PRIMARY KEY
termin_name VACHAR(100) NULL
beschreibung TEXT NULL
datum DATETIME NOT NULL
wochentag INT(1) NULL
wiederholungen INT(2) NULL


Jetzt stehe ich vor folgendem Problem und weiss nicht weiter:
Ich möchte, dass ein Termin immer nur einmal eingegeben werden muss.
In diesem einmaligen Datensatz kann man einen Intervall bestimmen (Spalten: wiederholungen, wochentag), in dem der Termin jeweils stattfindet. Es soll also möglich sein, zyklische Termine einzugeben.

z.B.: "Termin findet jeden Freitag statt."

Die Frage ist aber: wie erzeuge ich eine Liste, die mir alle Termine innerhalb von 4 Monaten anzeigt?

Es ist eher eine architektonische Frage, wie sich unschwer erkennen lässt.
Mit mySQL ist das alleine nicht zu machen.
renee
 2008-03-10 19:26
#106901 #106901
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du könntest z.B. mit Date::Calc arbeiten...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2008-03-10 19:36
#106905 #106905
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Hi Renee!

Wenn ich dich richtig verstehe, soll ich erstmal eine Schleife erstellen, die mittels Date::Calc alle Tage ausgibt, die innerhalb dieser 4 Monate vorkommen.
Dann müsste ich im folgenden für jeden Tag ein SELECT ausführen.
Das SELECT müsste dann herausfinden, welche Termine in diesem Zeitraum auftauchen, bzw. wiederholt werden.

Also angenommen ich habe einen Array mit allen Tagen:
Code: (dl )
1
2
3
4
5
6
7
my $dates_per_day = sub {
#SQL
};

for (@days) {
my @dates_today = $dates_per_day->($_); #zeige Termine für diesen Tag
}


Jetzt komme ich aber zum SQL-Statement. Wie muss die WHERE-Klausel bei sowas aussehen?
Bequemener wäre ja, wenn ich pro Monat nur ein Statement ausführen müsste. Aber es kann ja vorkommen, dass sich einzelne Termine bereits innerhalb eines Monats wiederholen!
renee
 2008-03-10 19:45
#106907 #106907
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vor dem Insert könntest Du doch alle Wiederholungen mittels Date::Calc suchen und dann alle Termine in die DB eintragen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2008-03-10 20:32
#106911 #106911
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
aber das genau wollte ich vermeiden.
Weil ich will später jederzeit den Intervall noch ändern können.
Außerdem will ich eine einheitliche Beschreibung für alle Termine haben und diese bei einer Änderung nicht auf die ganzen anderen termin-Datensätze übertragen müssen.
Froschpopo
 2008-03-11 00:24
#106913 #106913
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
keineswegs!
Aber bei Renee's Lösung stellt sich doch die Frage, wie Änderungen am Zyklus gehändelt werden. Bsp: Ich ändere den Intervall. Dann müssten alle tbl_Termin_Datum-Datensätze zu dieser Termin_ID gelöscht bzw. durch die des neuen Zyklusses ersetzt werden. Das sieht so unschön aus :D und man hat immer das Gefühl, dass bei einem solchen Wechselvorgang irgendwelche Zyklen vergessen wurden und Datenmüll hinterblieben ist.
renee
 2008-03-10 20:42
#106914 #106914
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Dann musst Du immer *alle* Termine betrachten, da Du ja sonst nicht ausschließen kannst, dass nicht eine Wiederholung eines Termins von vor 3 Jahren auftaucht...

Du könntest ja die Struktur so machen:

tbl_Termin
-> Termin_ID
-> Beschreibung
-> sonstiges

tbl_Termin_Datum
-> TD_ID
-> Termin_ID

Wenn sich an einer Terminbeschreibung etwas ändert, hast Du es nur an einer einzigen Stelle zu tun. Und über die Termin_ID in der zweiten Tabelle kannst Du schnell rausfinden, an welchem Tag welcher Termin erledigt werden muss.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2008-03-10 21:02
#106916 #106916
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
hm, ja so könnte ich es auch machen. Würde das ein Profi auch tun?
KurtZ
 2008-03-10 21:55
#106919 #106919
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
du hälst also Renee für einen Amateur? ;-)
TMTOWTDYOG (there's more than one way to dig your own grave)
lux
 2008-03-11 07:41
#106928 #106928
User since
2007-09-15
104 Artikel
BenutzerIn
[Homepage]
user image
Froschpopo+2008-03-10 20:02:21--
hm, ja so könnte ich es auch machen. Würde das ein Profi auch tun?


Was machst Du, wenn ein einzelner Termin Deiner Terminserie verschoben oder gar gelöscht wird?

Gruß

Dirk
Blog - Podcast - Frau - Hunde
Schweizer Tastaturen kennen kein sz.
<< |< 1 2 3 >| >> 23 Einträge, 3 Seiten



View all threads created 2008-03-10 18:05.