[mysql] Abfrage-Ergebniss auf 1 Zeile

  • Themenstarter Themenstarter AndiSQLANdi
  • Beginndatum Beginndatum
A

AndiSQLANdi

Hallo!

Ich habe folgendes Problem.

Es geht um eine Inventar-Datenbank. Ich habe ein Problem mit der Verknüpfung der Monitoren zu den PCs.

Jeder PC soll 1 oder 2 Monitore haben. Das ganze ist auch nicht besonders schwierig. Der Fremdschlüssel liegt in der Tabelle Monitore.

Wenn ich jetzt eine Abfrage mache, erscheinen natürlich alle PCs mit zwei Monitoren doppelt, also:

Code:
computer.ID	name	typ	monitor.ID	computer.idfs	marke	typ
----------------------------------------------------------------------------
1		PC001	VL600	1		1		EIZO	L365
2		PC002	VL420	2		2		EIZO	L330
2		PC002	VL420	3		2		EIZO	L685
...

Das ist auch alles korrekt!

Gibt es tortzdem eine Möglichkeit, auch PCs mit 2 Monitoren auf 1 Zeile darzustellen, mit einer Relationstabelle oder so? Das es schlussentlich eine folgende Abfrage gibt:

Code:
PC001	Monitor1	      -
PC002	Monitor1	   Monitor2
...

Ich habe schon vieles probiert und bin mir nicht sicher ob es überhaupt irgendwie geht. Könnt ihr mir helfen? :(
 
Es geht so:

Du brauchst eine Relationstabelle PC_Monitor mit den Spalten

pc_id Monitor_id anschluss
1 123 1
1 234 2

Du verknüpfst dann deine PC Tabelle zwei mal mit der PC_Monitor-Relationstabelle, wobei die Verknüpfung einmal anschluss=1 erwartet und beim zweiten Mal anschluss=2

Du mußt dabei aber left joins verwenden, damit du auch dann etwas erhälst, wenn nur ein Monitor angeschlossen ist.

vop
 
Anschluss?

Ich versteh nicht ganz wie du das mit dem Anschluss verknüpfen möchtest. Könntest du einen kurzen Code dafür aufschreiben, um mir auf die Sprünge zu helfen?
 
Tabelle PCS enthält deine PCs
Tabelle PC_Monitore enthält deine PC<->Monitor - Relationen
Verwende MySql-Syntax


SELECT ....
FROM PCS
LEFT JOIN PC_Monitore on PC_Monitore.pc_id = PCS.pc_id and PC_Monitore.anschluss = 1
LEFT JOIN PC_Monitore on PC_Monitore.pc_id = PCS.pc_id and PC_Monitore.anschluss = 2

Damit verknüpfst du die Tabelle PCs erstmal nur zweimal mit der PC_Monitor Tabelle

Du mußt noch ein bißchen an der Syntax feilen, da ich das nur mal so schnell runter geschrieben haben.

Hilft dir das etwas weiter?

vop
 
Zweite Möglichkeit

Danke für deine Hilfe. So geht es! Ich habe inzwischen noch eine andere Möglichkeit gefunden; ohne Relationstabelle (nur 2 Tabellen).

- Tabelle pc beinhaltet zwei Fremdschlüssel (m1_idfs, m2_idfs)
- Tabelle monitor behinhaltet einfach die Monitore.

Die Abfrage lautet dann:

SELECT pc.name, monitor.typ, monitor_2.typ
FROM (monitor INNER JOIN pc ON monitor.id = pc.m1_idfs)
INNER JOIN monitor AS monitor_2 ON pc.m2_idfs = monitor_2.id;

Die Frage ist jetzt, welche Lösung die 'saubere Variante' ist. =)

Gruss
Andi :)
 
Zurück