Tabellen vergleichen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Tabellen vergleichen?

    hallo, ich habe folgendes problem...
    es geht um eine schuldatenbank.
    es gibt die relationen

    belegte_kurse: hier ist jede userid mit einer kursid verknüft (also welcher schüler welchen kurs belegt)

    kurse: hier ist der schlüssel die kurs id, ebenso ist angegeben welcher lehrer unterrichtet und wann der kurs stattfindet (wo in der zeitleiste, als beispiel G3) und der jahrgang

    zeitleiste: hier steht wann welcher kurs stattfindet (also kurse die auf der Leiste G3 liegen freitags 3. und 4. stunde) und der jahrgang, da G3 für die 12. klassen nicht zur gleichen zeit stattfindet wie G3 für die 13. klassen.

    kranke_lehrer: hier steht welcher lehrer wann nicht da ist mit datum (also 2005-10-27) als beispiel. schlüssel ist eine auto_inc id

    kranke_zeiten: hier steht nochmal genau in welchen stunden der lehrer nicht da ist (wenn er erst ab der 5. stunde fehlt z.B.) also als fremdschlüssel die id von kranke_lehrer und dann noch ne zahl als jeweilige stunde.

    so, ich will jetzt herausfinden welche kurse bei mir (schülernr= 1) ausfallen weil lehrer fehlen... dazu habe ich folgende abfragen:

    PHP-Code:
    // sucht alle lehrer die krank sind, die man auch hat und die heute oder in zukunft nicht da sind
    $sql1 "SELECT kurse.lehrer FROM belegte_kurse, kurse, kranke_lehrer
           WHERE belegte_kurse.userid = '"
    .$_SESSION['userid']."'
           AND belegte_kurse.kursid = kurse.id
           AND kurse.lehrer = kranke_lehrer.lehrer
           AND kranke_lehrer.datum >= '"
    .$aktdatum."'
           group by (kurse.lehrer);"
    ;

        
    // Schaut wann man diesen Lehrer hat (Wochentag/Stunde)
        
    $sql2 "SELECT zeitleiste.wochentag, zeitleiste.stunde FROM belegte_kurse, kurse, zeitleiste
               WHERE belegte_kurse.userid = 1
               AND belegte_kurse.kursid = kurse.id
               AND kurse.lehrer = '"
    .$lehrer."'
               AND kurse.zeitleiste = zeitleiste.zeitleiste
               AND kurse.jahrgang = zeitleiste.jahrgang
               order by zeitleiste.wochentag, zeitleiste.stunde;"
    ;

        
    // Schaut wann dieser Lehrer nicht da ist (Wochentag/Stunde/Datum)
        
    $sql3 "SELECT DAYOFWEEK(kranke_lehrer.datum), kranke_zeiten.stunde, kranke_lehrer.datum FROM kranke_lehrer, kranke_zeiten
               WHERE kranke_lehrer.id = kranke_zeiten.id
               AND kranke_lehrer.lehrer = '"
    .$lehrer."';"
    So, jetzt habe ich 3 Tabellen... aber es muss doch möglich sein eine Abfrage zu erstellen, die mir sucht was ich will und nur eine Tabelle ausgibt. ich bin am verzweifeln. hab gestern stunden lang versucht... (insbesondere weil ich in $sql3 ja SELECT DAYOFWEEK(kranke_lehrer.datum) habe, um vom datum auf nen wochentag zu kommen. aber wie kann ich das dann wieder vergleichen? )

    die einzige möglichkeit die mir eingefallen ist, sind schleifen, die eben für jeden lehrer das array (mysql_fetch_row) von sql2 und sql3 vergleichen... aber das ist ja nicht das gelbe vom ei?

    hoffe jemand hat geduld sich das alles durchzulesen und mir zu helfen
    danke schonmal

    fl4sh

  • #2
    Warum nicht mit JOINS?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      das habe ich ja vor, aber wie gesagt, mein problem ist ja, dass ich DAYOFWEEK(kranke_lehrer.datum) erst generieren muss...
      also geht ja nicht sowas wie

      "SELECT DAYOFWEEK(kranke_lehrer.datum) AS wochentag FROM kranke_lehrer, zeitleiste
      WHERE zeitleiste.wochentag = wochentag;"

      man beachte die where zeile... wie kann ich über eine zeile joinen, die mir mysql erst durch einen befehl (DAYOFWEEK) generiert?

      Kommentar


      • #4
        WHERE zeitleiste.wochentag = DAYOFWEEK(kranke_lehrer.datum)
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          danke, das hat mir schon viel gebracht. hätte ich eigentlich auch selbst drauf kommen können *grml*

          jetzt habe ich
          PHP-Code:
          SELECT 
          FROM belegte_kursekursezeitleiste
          WHERE belegte_kurse
          .userid =1
          AND belegte_kurse.kursid kurse.id
          AND kurse.lehrer "mü"
          AND kurse.zeitleiste zeitleiste.zeitleiste
          AND kurse.jahrgang zeitleiste.jahrgang

          AND zeitleiste.wochentag
          IN 
          (
          SELECT DAYOFWEEKkranke_lehrer.datum 
          FROM kranke_lehrer
          WHERE kranke_lehrer
          .lehrer "mü"

          das zeigt mir quasi an ob ich den lehrer an den tagen, an denen er krank ist habe. woran ich jetzt aber noch verzweifel ist, dass ich nicht rauskriege wie ich schauene kann, ob ich ihn auch in der stunde habe in denen er fehlt...

          würde ich nun noch hinzufügen
          PHP-Code:
          AND zeitleiste.stunde
          IN 
          (
          SELECT kranke_zeiten.stunde
          FROM kranke_lehrer
          kranke_zeiten
          WHERE kranke_lehrer
          .id kranke_zeiten.id
          AND kranke_lehrer.lehrer "mü"

          würde das ja nicht gehen. als beispiel:
          man hat den lehrer "mü" mittwochs 3. und 4. stunde und freitags 5. und 6.
          er fehlt nun jedoch mittwochs zur 5. und 6. stunde.
          das betrifft mich ja nun nicht, da ich ihn ja davor noch habe.
          bei dem oben genannten beispiel (mit ergänzung) meint er jedoch ich hätte freitags die 5. und 6. frei. klingt logisch von der abfrage her, stimmt aber nicht...
          in php würde ich zwei AND bedingungen in die if abgfrage machen, also
          if (lehrer_krank.[tag] = unterricht.tag[tag] AND lehrer_krank[stunde] = unterricht[stunde])
          bzw.
          PHP-Code:
          if (lehrer_krank.tag unterricht.tag)
          {
             if (
          lehrer_krank.stunde unterricht.stunde)
                return 
          true;

          ich muss ja zuerst die tage überprüfen bevor ich die stunden überprüfen kann...

          *verzweifeltbin*

          Kommentar

          Lädt...
          X