PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Abfrage aus Tabelle und Untertabelle (http://www.selfphp.de/forum/showthread.php?t=17407)

KTB 10.08.2007 15:31:24

Abfrage aus Tabelle und Untertabelle
 
Hallo zusammen,
komischer Titel, aber ich weiß nicht wie ich es anders beschreiben soll :(

Ich habe 4 Tabellen.
In Tabelle ip stehen alle IP's mit zugehöriger PC-ID (GerateID).
In Tabelle standort stehen alle Standorte.
In Tabelle pc stehen alle PC's mit zugehöriger Standort-ID und Port.
In Tabelle server stehen alle Server mit zugehöriger Standort-ID und Port.
port ip name

Jetzt möchte ich, dass er mir alle PC's & Server mit IP-ID und Standort ausgibt.
Meine bisherigen Versuche endeten bisher immer desolat.
Mein letzter Versuch:
Code:

SELECT pc.Name AS pcName, pc.Port AS pcPort, ip.ID AS ipID, server.Name AS serverName, server.Port AS serverPort
FROM server, pc
JOIN standort ON standort.ID = ( pc.Standort OR server.Standort )
JOIN ip ON ( ip.GerateID = ( pc.ID AND ip.Typ = 'pc' ) OR (
server.ID AND ip.Typ = 'server'
) )
WHERE standort.Strasse = 'BW28'

Hier Ignoriert er scheinbar auch WHERE. Ich erhalte einfach alle PCs x-mal (x steht für die anzahl der Server).

Minimiere ich die Abfrage auf die PCs, funktioniert es, wie es soll:
Code:

SELECT pc.Name AS pcName, pc.Port AS pcPort ,ip.ID AS ipID
FROM pc
JOIN standort ON standort.ID = pc.Standort
JOIN ip ON ip.GerateID = pc.ID AND ip.Typ = 'pc'
WHERE standort.Strasse = 'BW30'

Hier werden alle PCs mit IP-ID,Port und PC-Name angezeigt.

Was mache ich falsch, bzw. welchen Tipp könnt ihr mir geben?

KTB 13.08.2007 09:43:35

AW: Abfrage aus Tabelle und Untertabelle
 
...doch nicht möglich?

diver-network 14.08.2007 09:06:39

AW: Abfrage aus Tabelle und Untertabelle
 
Hi,

um Dir zu helfen wären folgende Angaben nicht schlecht:

- (CREATE TABLE Syntax)
- Beispieldaten
- gewünschtes Ergebnis

Ansonsten solltest Du Dir mal Deine JOIN Syntax anschauen.
Zitat:

JOIN standort ON standort.ID = ( pc.Standort OR server.Standort )
Erstens glaube ich nicht, daß das OR in der Klammer in Ordnung ist, zweitens würde ich anhand der zu verknüpfenden Feldernamen sagen, daß Du versuchst, eine Zahl (ID) mit einem String (Standort) zu verknüpfen.
Hier könnte es schon helfen, wenn Du die Tabellen über
Code:

JOIN standort ON pc.standort = server.standort
verknüpfst. Ob das passt musst Du selber entscheiden, ohne Beispieldaten geht nichts.

HTH,
Andy

(edit:)
Sehe gerade, daß Du doch schon ein paar mehr Angaben gegeben hast. Werd' noch mal genauer drüber schauen.
(/edit)

diver-network 14.08.2007 09:20:43

AW: Abfrage aus Tabelle und Untertabelle
 
Hi,

hab' mir jetzt noch mal ein paar Gedanken mehr gemacht und würde Dir folgenden Vorschlag machen:
Überdenke Deine Tabellenaufteilung noch mal. Wieso benötigst Du zwei Tabellen für PC und Server?
Soweit ich es einschätzen kann enthalten beide Tabellen die selben Daten. Um zu unterscheiden, ob es sich um einen Server oder "nur" um einen PC handelt reicht eine weitere Spalte "Server", anhand derer Du unterscheiden kannst.
Das geht natürlich nur, wenn ein Gerät nicht gleichzeitig Server und PC sein kann.
(edit:)
Es geht doch, dann muss eben ein dritter Wert in die Spalte eingetragen werden, also z.B. 1 für PC, 2 für Server, 3 für beides
(/edit)

Weiterhin würde ich Dir empfehlen, die Tabellennamen zu verändern. Normalerweise ist der Name einer Tabelle in der Mehrzahl, also z.B. "PCs" und der Spaltenname in der Einzahl "port, pcname,...".

Ansonsten befürchte ich, daß Du es nicht mit einer einzelnen Abfrage schaffst, die gewünschten Informationen zu bekommen. Mach also zwei Abfragen, die Dir zuerst die PCs mit allen Informationen geben, danach eine zweite Abfrage für die Server. Über den Programmcode (z.B. in PHP) kannst Du die Ausgaben besser aufbereiten.

HTH,

Andy


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:10:29 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.