3 Tabellen
spartakus
- datenbank
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
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
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