Announcement

Collapse
No announcement yet.

Hilfe bei SQl-Anweisung :()

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

  • Hilfe bei SQl-Anweisung :()

    Guten Morgen zusammen,

    da ich langsam nicht mehr weiter weiß und mir immoment auch niemand sonst helfen kann, habe ich mir gedacht, dass es vieleicht doch mal Zeit wäre, dass ich in einem Forum nach Hilfe frage.

    Ich werde euch erstmal die Problemstellung erläutern:
    Zurzeit bin ich dabei einen Kalender für eine ASPX - basierende Internetseite zu programmieren. In diesem soll man erstmal Schuljahre zu verschiedenen Objekten (Schulen) anlegen können. Dann kann man Ereignistypen anlegen, die wiederrum notwendig sind, um Ereignisse anlegen zu können.
    Bei den Ereignissen, legt man fest, wann Sie stattfinden (Zeitintervall oder nur 1 Tag), von welchem Typ Sie sind und ob Sie sich wiederholen.
    Die Ereignisse speichert man dann entweder für ein Objekt oder für ein Bundesland.
    Nun sieht es so aus, dass ich natürlich auf der Internetseite auch Daten ausgeben möchte. Sprich der Benutzer sucht sich ein Objekt (Schule) und 1 Schuljahr aus und dann sollen alle Ereignisse in einer Liste angezeigt werden, die im Zeitintervall des Schuljahres vorkommen.

    An sich ist das ja kein Problem. Man braucht ja nur eine Select Anweisung zu schreiben, die alle Datensätze aus der Datenbank holt, wo der Von- und Biswert des Ereignisses zwischen dem Von- und Biswert des Schuljahres liegt und dem Bundesland oder der Schule zugewisen ist.

    Mein Problem kommt aber bei den wiederholenden Ereignissen zu Stande.
    Ich würde es gerne so machen, dass ich nur einmal ein wiederholendes Ereignis speichern muss, um es immer wieder in der Ansammlung sehen zu können. Egal welches Jahr man hat. Doch wie kann ich es nun schaffen, dass ich in der SQl Anweisung die passenden wiederholenden Ereignisse zum Schuljahr herausbekomme?

    Ich habe hier nochmal ein Bild des benötigten Datenbankteilabschnitts und einen Ansatz der SQl-Anweisung. Vieleicht weiß ja jemand ein paar Tipps oder sogar eine Lösung.

    SQL:
    Code:
    SELECT CalendarEventGUID, CalendarEventDescription, ValidFrom, " & _
            "ValidTo, isPeriodic, isSystemEvent, CalendarEventTypeFk, ObjectFk, CountyFK, AddNewUser, " & _
            "AddNewDate, LastUpdateUser, LastUpdateDate  FROM CalendarEvents WHERE ((((ObjectFK = @ObjectFK) OR " & _
            "(CountyFk = @CountyFK)) AND ((ValidFrom BETWEEN @ValidFrom AND @ValidTo) AND (ValidTo BETWEEN @ValidFrom " & _
            "AND @ValidTo))) OR (isPeriodic = '1' AND ((ObjectFK = @ObjectFK) OR (CountyFk = @CountyFK))))
    Durch diese Anweisung bekomme ich nun alle Events, die im Zeitraum des Schuljahres liegen und auch dem Objekt oder dem BL angehören. Jedoch bekomme ich bisher auch ALLE wiederholenden Events. Egal ob Sie im Schuljahr liegen oder nicht. (Der Teil nach dem OR im WHERE-Abschnitt)
    .

    DB - Modell:
    Ich habe die Sachen, die euch eh nur verwirren mal gestrichen. Zudem ist es vieleicht gut zu wissen, dass die ValdiFrom - und ValidTo - Datentypen von Typen DATE(8) sind.

    http://img194.imageshack.us/f/dbmodell.png/
    Zuletzt editiert von Der.Andi; 05.01.2011, 12:27.

  • #2
    Hallo,
    Originally posted by Der.Andi View Post
    ...Durch diese Anweisung bekomme ich nun alle Events, die im Zeitraum des Schuljahres liegen ...
    Ja, aber auch NUR die! Was ist mit Events, die zwar im Zeitraum beginnen aber erst später enden oder umgekehrt oder ganz und gar vorher beginnen und nachher erst enden? Die fallen bei deiner Abfrage komplett unter den Tisch!

    Alle Einträge (ValidFrom, ValidTo) die irgendwie innerhalb des Abfrageintervalls (@ValidFrom, @ValidTo) liegen, bekommt man recht einfach mit:
    [highlight=sql]
    ...
    where ValidFrom <= @ValidTo and ValidTo >= @ValidFrom
    [/highlight]

    Zu deinem eigentlichen Problem: Das wird sich wohl kaum vernünftig in reinem SQL lösen lassen. Ich würde eher vorschlagen, die wiederkehrenden Termine innerhalb der Applikation zu ermitteln und in die Ausgabe zu integrieren. Evtl. wäre auch eine SP denkbar, die anhand eines übergeben Intervalls prüft, ob ein wiederkehrender Termin in diesem Intervall liegt oder nicht.
    Das Problem hierbei: Wiederkehrende Termine, die MEHRFACH im Abfrageintervall vorkommen. Hier wirst du um eine Schleife in der Applikation nicht umhin kommen.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment

    Working...
    X