Announcement

Collapse
No announcement yet.

datetime anfang & ende im PK ohne Zeitüberschneidung???

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

  • datetime anfang & ende im PK ohne Zeitüberschneidung???

    hi
    bin mir nicht sicher ob das überhaupt geht...
    ich habe eine Tabelle FindetStatt. PK sind DisziplinNr,AustragungsortNr, TerminBeginn und TerminEnde (datetime)

    (es geht um Sport Veranstaltungen bestimmte Disziplinen finden zu bestimmten Zeiten in bestimmten Austragungsorten statt)

    es sollen aber auch nicht möglich sein das solange eine Disziplin in einem Stadion statt findet die selbe Disziplin nochmal beginnt obwohl sie noch läuft... ich hoffe ihr versteht mich

    also z.b.
    Fussball,StadionA,2011-07-30 12:00:00, 2011-07-30 14:00:00;
    Fussball,StadionA,2011-07-30 13:00:00, 2011-07-30 15:00:00;

    also das soll nicht möglich sein.

  • #2
    Hallo,

    würde sagen, dass sich da ein before insert trigger anbietet.

    Gruß

    MArtin

    Comment


    • #3
      Hallo,
      Originally posted by Chaoso View Post
      ...PK sind DisziplinNr,AustragungsortNr, TerminBeginn und TerminEnde (datetime)
      Ein PK über vier! Felder - *grusel*...
      Ein PK sollte immer TECHNISCHER NATUR sein, also nicht aus Nutzdaten bestehen und auch nicht aus mehreren Feldern. (wobei sich Letzteres ausschliest, wenn man Ersteres beachtet!)

      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


      • #4
        Originally posted by Martin R. View Post
        würde sagen, dass sich da ein before insert trigger anbietet.
        MArtin
        Hi danke trigger hatte ich ganz vergessen das es sowas gibt bin da gerade nich so fit drin...
        Create Trigger trigger_FindetStatt_Zeitueberschneidung before Insert on FindetStatt For each Row when (NEW.Termin

        ... nur jetzt frag ich mich immer noch wie ich das mit dem Zeitraum checken kann ob sich da was überschneidet.


        Originally posted by Falk Prüfer View Post
        Ein PK über vier! Felder - *grusel*...
        Ein PK sollte immer TECHNISCHER NATUR sein, also nicht aus Nutzdaten bestehen und auch nicht aus mehreren Feldern. (wobei sich Letzteres ausschliest, wenn man Ersteres beachtet!)

        Gruß Falk
        ich weiss ich weiss ursprünglich bestand der PK ja nur aus 2 Feldern und dann wurd das halt verschlimmbessert

        Comment


        • #5
          Hallo,

          um zu prüfen ob sich zwei Zeiträume A und B überschneiden, egal ob nun teilweise oder vollständig, kann man folgende Logik verwenden:

          Ende_A >= Anfang_B UND Ende_B >= Anfang_A

          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


          • #6
            Originally posted by Chaoso View Post
            ...Create Trigger trigger_FindetStatt_Zeitueberschneidung before Insert on FindetStatt For each Row when (NEW.Termin
            Formatierung von SQL in Beiträgen
            Einen FOR EACH ROW-Trigger wirst du nicht verwenden können, da du die aktuell geänderte Tabelle lesen musst und die meisten DBMS das nicht zulassen.

            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


            • #7
              Originally posted by Falk Prüfer View Post
              Hallo,

              um zu prüfen ob sich zwei Zeiträume A und B überschneiden, egal ob nun teilweise oder vollständig, kann man folgende Logik verwenden:

              Ende_A >= Anfang_B UND Ende_B >= Anfang_A

              Gruß Falk
              Danke für deine Antwort
              aber ich muss doch mehr als zwei Zeiträume prüfen... Angenommen ich hab eine Tabelle Veranstaltung mit den Feldern Anfang, Ende und ID oder so

              12:00, 15:00,1
              13:00,14:00,2
              14:00,14:30,3
              14:30,15:00,4

              jetzt überschneidet sich alles mit 1. Die 2 und 3 überschneiden sich nur mit der 1. Die 4 nur mit der 1.

              Wie würde jetzt z.b. ne Select abfrage aussehen um parallel stattfindende Veranstalltungen anzuzeigen?


              //edit:
              ok hab's hin bekommen. musste noch so was wie A_ID<>B_ID einfügen ...

              select a.Anfang,a.Ende,COUNT(*) AS Veranstaltungen from tbl_bla a
              INNER JOIN tbl_bla b
              on a.id=b.id
              AND
              ((a.Anfang<=b.Anfang) AND (b.Anfang<=a.Ende))OR
              ((a.Anfang<=b.Ende)AND (b.Ende<=a.Ende))OR
              ((b.Anfang<=a.Anfang)AND (b.Ende>=a.Ende))
              AND a.id<>b.id
              Group by a.Anfang, a.Ende;
              Zuletzt editiert von Chaoso; 11.06.2011, 14:34.

              Comment

              Working...
              X