php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.04.2006, 19:14  
Benutzer
 
Registriert seit: 18.09.2004
Beiträge: 46
Borlox
Standard Serientermine in einem Kalender realisieren?

Hallo alle zusammen,

ich erstelle gerade ein "kleines" Groupwaresystem in php und habe folgendes Problem bei der Erstellung der Termine für meinen Kalender:

Ich möchte, wie es auch in anderen Systemen möglich ist, Serientermine anlegen können, also wenn jemand einen Termin angibt, dass er dann z.B. auf wöchentlich klickt und dann kommt der Termin jede Woche wieder! Das ganze natürlich auch Monats- und Jahresweise! Wie würdet ihr das am Besten realisieren? Wollte das erst in extra Tabellen schreiben, aber es soll ja die Möglichkeit geben, wieder Termine aus der Serie raus zu nehmen. Nun könnte ich zwar einfach den Termin immer wieder kopieren und in meine DB speichern, aber dann würde sich diese ja ins unermessliche aufblähen. Wenn z.B. Leute wöchentliche Termine angeben und das bis ins Jahre 2050 oder so! Dann ist die Performance ja gleich im Arsch!

Jemand ne performante Idee?

Gruß Borlox
Borlox ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.04.2006, 19:58  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Du willst also periodische Events mit Ausnahmen (wöchtenlich, aber nicht am 27. April 2006 zB) eintragen können?

Hm ich würde das so lösen, dass ich in der Event-Tabelle einen Flag setzen würde, ob es sich um einen periodischen Eintrag handelt

id | start (DATE) | end (DATE) | periodtype (TINYINT) | name | ...

periodtype würde ich dann
0 für "nicht periodisch"
1 für "wöchentlich"
2 für "monatlich"
3 für "jährlich"
(oder vierteljährlich, wie auch immer)

so setzen und in einer Extra-Tabelle eine Blacklist der Periodentermine führen, die eben für Ausnahmen stehen

id | event_id | not_in_period (DATE) | instead (DATE)
instead eventuell für "abnormalen" ausweichtermin, könnte aber auch als "normaler" Event in die Eventtabelle eingetragen werden


Naja bei Abfragen kannst du jetzt normal alle Termine ausgeben, die zwischen "start" und "end" liegen, wenn "periodtype" ungleich 0 ist, musst du eben nochmal gesondert rechnen, da gibts ja Datumsfunktionen die dir jeweils Tage, Monate oder Jahre zu einem Datum ("start") hinzufügen können. Könnte dann halt ein längeres Statement werden, aber so ist es halt.

Zusätzlich muss noch rein, ob die Periode nicht genau heute auf einen Blacklist-Eintrag fällt.


Das wäre jetzt meine Idee. Find ich aber ganz sauber, praktisch hab ichs aber nie so gemacht (da hab ich nur jährliche Events in meinen Kalender übernommen, mit Jahresangabe 0000 und dementsprechendem SQL WHERE datum = '0000-...' or datum = '2006-...', nicht gerade erste Sahne, aber hatte keine Zeit für mehr damals)
Zergling-new ist offline   Mit Zitat antworten
Alt 25.04.2006, 20:38  
Benutzer
 
Registriert seit: 18.09.2004
Beiträge: 46
Borlox
Standard

Joa, hört sich schon sehr interessant an. Kennt ihr noch mehr Möglichkeiten, muss mich ja nicht gleich für die Erste entscheiden?

Hat es irgendeinen Vorteil für dich, wenn du deine Dates im Format 'YYYY-MM-DD' speicherst? Ich mach das immer mit Timestamps, da ich damit dann ja ein wenig einfach umgehen kann???

Gruß Borlox
Borlox ist offline   Mit Zitat antworten
Alt 25.04.2006, 22:49  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich mag Timestamps net so, weil wenn ich in die DB guck, will ich sehen und gleich verstehen was da ungefähr für ein Datum/Zeit steht.

Außerdem hab ich dann nicht die Beschränkung auf 1970 und kann so alle Daten auch als Datum darstellen (Geburtstage) und muss keine Kompromisse eingehen (mal Timestamps mal DATE(TIME)).

Auf andere Ideen wär ich aber auch mal gespannt zum Thema..
Zergling-new ist offline   Mit Zitat antworten
Alt 26.04.2006, 10:41  
Benutzer
 
Registriert seit: 18.09.2004
Beiträge: 46
Borlox
Standard

Naja, das man das gleich in der DB sieht, finde ich nicht so wichtig, dazu bastel ich mir ja auch meine Oberfläche! Und wenn ich mich nicht irre, dann kann man auch Timestamps im Minus-Bereich anlegen (mache ich in meiner DB mit Geburtstagen), nur Windowsserver haben kleinere Probleme damit, wenn das Datum dann vor 1902 oder so kommt, dann wird die Zahl ZU negativ, dass kann Windows dann nicht mehr Beispielen oder so! Hatte das letztens mal rechachiert (<-- keine Ahnung, wie man das richtig schreibt)!

Gruß
Dustin
Borlox ist offline   Mit Zitat antworten
Alt 25.07.2006, 15:14  
Benutzer
 
Registriert seit: 14.02.2006
Beiträge: 49
webazubi
Standard

Um das Thema nochmals aufzuwärmen ...

Ich hatte mich vor längerem mal mit den Serienterminen beschäftigt und auch im Forum die Frage gestellt, ob es (aus Gründen der Abfragegeschwindigkeit) sinnvoller sei,
(A) die Serientermine alle als einzelne Datumswerte (für jeden Tag eines Termines je einen Datensatz) einzugeben oder eben
(B) die Berechnung über weitere Verknüpfungen und Intervalle (wie wöchentlich, monatlich usw.) zu basteln, so dass pro Terminserie nur ein Datensatz entsteht.

Damals wurde mir geraten, die Termine alle einzeln in die Datenbank einzutragen (A), weil dadurch die Abfragegeschwindigkeit gegenüber der "Einzelfall-Berechnung" steigt.
Nun lese ich aber hier im Forum immer öfter die andere Variante, dass also online per MySQL oder PHP ein Datum daraufhin untersucht werden soll, ob es in einen Zeitraum fällt, der durch einen Serientermin abgedeckt wird (B).

Ich habe (für eine Internetzeitung) sehr viele Einzeltermine und Terminserien. Allein die Öffnungszeiten von vielen Einrichtungen, die ich mit in meiner Datumsabfrage einbauen will, spricht eher für die Intervallvariante (B).

Aber wenn ich mir vorstelle, dass online jeder sagen wir zweite Termin auf das Intervall untersucht werden soll, dann dauert doch auch das ewig!? Ich kann die Abfrage natürlich eingrenzen, aber ich sehe es doch richtig, dass PHP oder MySQL jeden Termin, der mit einem Intervall verknüpft ist, in einem Array bzw- Abfrage ausführen muss, um dann diese Ergebnisse mit dem gewünschten Datum zu vergleichen?
Sprich: Habe ich einen Datensatz, der am 15.01.2006 begann und über einen Wert "w" als wöchentlicher Termin gekennzeichnet ist, dann müsste ich per Array/Abfrage simulieren 15.01.; 22.01;29.01 .. (alle 7 Tage) um dann zu schauen, ob heute der Termin läuft.

Das sind doch irre Rechenoperationen, oder? Also scheint die direkte Eingabe aller Termine in die Datenbank doch besser zu sein?
webazubi ist offline   Mit Zitat antworten
Alt 25.07.2006, 16:37  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Spontan würde ich schauen, ob der eingetragene Termin, der wöchentlich stattfindet den selben Wochentag hat, wie der gesuchte.

Meinem Beispiel oben entsprechend:
SELECT * FROM calendar WHERE (periodtype = 0 AND start = #GESUCHTES_DATUM#) OR (periodtype = 1 AND (#GESUCHTES_DATUM# BETWEEN start AND end) AND WEEKDAY(start) = WEEKDAY(#GESUCHTES_DATUM#))

Das ist für MySQL kein Problem.
Zergling-new ist offline   Mit Zitat antworten
Alt 25.07.2006, 19:05  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Andererseits ist das ein blödes Gefrickel in einer Tabelle wöchentlich/monatlich/1/x-jährliche Termine unterzubringen.

Vielleicht hat ja jemand den anderen PHP-Kenner einen Alternativ-Vorschlag?
Zergling-new ist offline   Mit Zitat antworten
Alt 25.07.2006, 20:29  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von webazubi
Das sind doch irre Rechenoperationen, oder?
Nur dann, wenn Du es genauso irre berechnest. Die Datum- und Zeitfunktionen von MySQL für DATETIME Spalten sind da sehr effizient.
  Mit Zitat antworten
Alt 25.07.2006, 22:47  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Zergling
Andererseits ist das ein blödes Gefrickel in einer Tabelle wöchentlich/monatlich/1/x-jährliche Termine unterzubringen.
Sehe ich nicht so. Zu unterscheiden braucht man letztlich nur zwischen einmalig, täglich und monatlich.

Man setzt also wie von Dir oben vorgeschlagen in einem Feld (periodtype) die Art des Intervalls:
  • 0 für "nicht periodisch"
  • 1 für "täglich"
  • 2 für "monatlich"

Die anderen periodischen Termintypen lassen sich dann über ein weiteres Feld (quantity), das die Anzahl der jeweiligen Periode angibt, abhandeln.

Beispiel:
  • periodtype = 2, quantity = 12 => jährlich
  • periodtype = 1, quantity = 4*7 => vierwöchentlich
  • periodtype = 2, quantity = 3 => vierteljährlich
  • usw.
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Transparente Runde Ecken bei Thumbnial realisieren tomtaz PHP Tipps 2008 3 08.07.2008 01:20
Kalender Problem pPanther PHP Tipps 2008 10 12.12.2007 18:32
MySQL-Abfrage in Kalender tsvst Datenbanken 5 13.09.2006 08:22
Suche PHP Event Kalender PHP Tipps 2005-2 2 28.09.2005 19:57
[Script] Kalender Beitragsarchiv 11 20.09.2005 15:31
Kalender PHP Tipps 2005-2 2 14.08.2005 18:41
fehler im Kalender PHP-Fortgeschrittene 3 01.06.2005 12:58
Kalender... arcor PHP Tipps 2005 13 08.05.2005 10:01
Kalender PHP Tipps 2005 22 17.03.2005 10:12
wochenzahl bei php kalender Sclot PHP Tipps 2005 12 11.03.2005 12:46
[Erledigt] Rollenspiel Kalender PHP Tipps 2005 4 29.01.2005 18:18
[Erledigt] Kalender Termine hervorheben PHP Tipps 2004-2 1 24.11.2004 13:02
kalender - variablenuebermittlung PHP-Fortgeschrittene 15 14.11.2004 21:24
kalender in background einfügen Sclot PHP Tipps 2004 4 06.10.2004 16:04
[Erledigt] kalender in php PHP Tipps 2004 1 02.08.2004 01:58

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
serientermine, serien termine, php serientermine, php serientermin, serientermine php, serientermin, mysql serientermin, serientermine datenbank, php kalender serientermine, php kalender serientermin, php terminserie, php kalender serie, serientermin php, google kalender serientermin, kalender serientermin, serientermin 1970, kalender serientermin ausnahme -outlook, php wöchentlich, mysql wöchentliche termine, serientermin datenbank

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:15 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.