Vinzenz Mai: 3 Tabellen

Beitrag lesen

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