spartakus: 3 Tabellen

Hi,

ich möchte mit einem SQL-Befehl auf 3 Tabellen gleichzeitig zugreifen:
Ich habe die Tabellen files, server und hidden (und eigentlich noch eine User-Tabelle).

Es sollen die Files ausgelesen werden und gleichzeitig die Server, auf denen dieses File verfügbar ist. Ein User hat allerdings die Möglichkeit bestimmte Server auszublenden. In diesem Fall ist ein Eintrag mit der User- und der Server-ID in der Tabelle hidden enthalten.

Bisher sieht mein Ansatz folgendermaßen aus:

SELECT files.file, server.name FROM files INNER JOIN server ON files.server = server.id GROUP BY files.file

Nun muss ich noch den Fall reinbringen, dass Server, die in der Tabelle hidden für den eingeloggten Benutzer eingetragen sind, nicht mit ausgelesen werden. Dies habe ich über verschiedene Ansätze mit weiteren Joins etc. versucht, kam aber leider nicht ans Ziel.

Kann mir hier evtl. jemand weiterhelfen? :)

Gruss
spartakus

  1. Hallo,

    Es sollen die Files ausgelesen werden und gleichzeitig die Server, auf denen dieses File verfügbar ist. Ein User hat allerdings die Möglichkeit bestimmte Server auszublenden. In diesem Fall ist ein Eintrag mit der User- und der Server-ID in der Tabelle hidden enthalten.

    Bisher sieht mein Ansatz folgendermaßen aus:

    SELECT files.file, server.name FROM files INNER JOIN server ON files.server = server.id GROUP BY files.file

    Du verwendest MySQL!
    Jedes andere Datenbankmanagentsystem, das ich kenne, außer MySQL quittiert
    Dein Statement mit einer einfachen Fehlermeldung.

    Es sollte lauten:

      
    SELECT  
        files.file,  
        server.name  
    FROM  
        files  
    INNER JOIN  
        server  
    ON files.server = server.id  
    GROUP BY  
        files.file,  
        server.name  
    
    

    Wenn Dieses Statement ein anderes Ergebnis liefert als das von Dir bisher
    verwendete, dann ist das Ergebnis Deiner bisherigen Abfrage zufälligerweise
    das von Dir gewünschte. Das Ergebnis kann sich in diesem Fall auch ändern,
    weil der Wert in server.name unvorhersagbar ist, wie Dir die MySQL-Doku
    verrät. Du willst in diesem Fall wahrscheinlich ein korreliertes Subselect
    verwenden.

    Nun muss ich noch den Fall reinbringen, dass Server, die in der Tabelle hidden für den eingeloggten Benutzer eingetragen sind, nicht mit ausgelesen werden. Dies habe ich über verschiedene Ansätze mit weiteren Joins etc. versucht, kam aber leider nicht ans Ziel.

    Ein Subselect könnte wahrscheinlich helfen, Subselects unterstützt MySQL ab Version 4.1.

    Bitte poste doch ein paar Datensätze Deiner drei Tabellen und das gewünschte
    Ergebnis - mit der Begründung, warum dies das gewünschte Ergebnis ist, dann
    kann man Dir zielgerichteter helfen. Und gib Die genaue MySQL-Version an.

    Freundliche Grüße

    Vinzenz

    1. Stimmt, ich hatte den letzten Teil vergessen, da stand noch:

      GROUP BY files.file, server.id

      Ich hatte den Befehl ein bisschen gekürzt, um es übersichtlicher zu gestalten. Das Original geht über mehrere Zeilen =)

      Habs jetzt mit einem Sub-Select gelöst. Funzt jetzt alles.

      Danke