# MySQL: JOIN, Group BY + Distinct



## Bicko (29. September 2006)

Hi,

ich habe leider ein grosses Problem mit der Abfrage über 3 Tabellen und komme dabei einfach nicht weiter.

Ich habe eine Tabelle mit Spielplänen. Die Tabelle „tblSpielplan“ sieht so aus:
	
	
	



```
+-------------+--------------+-----------+----------------+------------+------------+
| SpielplanID | SaisonLigaID | Datum     | Spieltagnummer | HeimTeamID | GastTeamID |
+-------------+--------------+-----------+----------------+------------+------------+
| 1           | 7            | 1.10.2006 | 1              | 55         | 56         |
| 2           | 7            | 1.10.2006 | 1              | 61         | 59         |
+-------------+--------------+-----------+----------------+------------+------------+
```

Nun möchte ich die Möglichkeit geben, diesen Spielplan wieder zu ändern. Das bedeutet, dass drei Sachen passieren müssen. 
1. Auslesen des Spielplanes um die momentanen Spielbegegnungen anzeigen zu können
2. Auslesen einer zweiten Tabelle, die alle möglichen Teams ausliest.
3. Verbinden dieser zweiten Tabelle mit der dritten Tabelle um die Namen auszulesen.

Die Darstellung erfolgt dann über mehrere Dropdownfelder, wobei das momentan ausgewählte Team bereits selektiert ist.

Nun also mein Problem. Die zweite Tabelle „tblLigaTeams“ mit allen Teams sieht so aus:
	
	
	



```
LigaID
SaisonLigaID
TeamID
```

In der dritten Tabelle „tblTeams“ stehen die Team Namen:
	
	
	



```
TeamID
TeamName
```

Mein bisheriger Ansatz:
	
	
	



```
SELECT 
tblSpielplan.MatchNo,tblSpielplan.Datum,tblSpielplan.HeimTeamID,
tblSpielplan.GastTeamID,
tblLigaTeams.TeamID
	
FROM
tblSpielplan
	
INNER JOIN
tblLigaTeams
ON tblSpielplan.SaisonLigaID=tblLigaTeams.SaisonLigaID
	
WHERE
SaisonLigaID= '7' AND MatchNo='$MatchNo' ");
```

Bei 5 Teams in der Tabelle Liga Teams würde das also 5 Resultate ergeben. Nun versuche ich jedoch ein Array mit den jeweiligen Teams (Heim und GastTeamID) zu füllen, um dieses dann später in die Dropdownfelder einzubauen.


```
while ($Saison= mysql_fetch_array($select))
{
   $SpielplanTeamIDHeim[]=$Saison['HeimTeamID'];
   $SpielplanTeamIDGast[]=$Saison['GastTeamID'];
}
```

Bei 2 Spielen, sprich 2 Heim und 2 Gastmannschaften, jedoch 5 Duchläufen klappt das so natürlich nicht.

Wie kann man sowas also lösen, das man alle Teams aus der Tabelle tblLigaTeams auslesen kann und nur 2 Datensätze aus der Tabelle Spielpläne ?

Ich verzweifle noch. Jemand eine Idee?


----------



## zeja (29. September 2006)

Was spricht gegen zwei Abfragen? Alle Teams und bestimmte Spiele sind ja nun keine Sachen die wirklich zusammengehören, daher würde ich das auch wenns geht nicht in eine Abfrage packen.


----------



## Bicko (29. September 2006)

Bedeutet das, das ich wieder zu kompliziert denke? Ich würde jetzt wirklich davon ausgehen, dass man das in eine SQL Abfrage packt. (Wenn es professionell sein soll)

Es wäre mir auch wirklich wichtig, eine ansprechende Lösung zu lernen, da es mir vielleicht irgendwann nochmal begegnet und ich im nächsten Fall vielleicht nicht einfach drumherum schiffen kann.

Doch wie sieht eine solche Lösung aus?


----------



## zeja (29. September 2006)

Überleg dir mal wie die Verarbeitung wäre wenn du das in einer Abfrage hast. Dann hast du x Zeilen für die Mannschaften aber nur zwei davon mit den Daten für die beiden Spiele. Wie willst du dann die Rückgabe durchlaufen?


----------



## Bicko (29. September 2006)

Ja und genau das ist ja auch mein Problem. Eine Tabelle komplett auslesen und aus der anderen Tabelle nur Teile. Aber das muss doch auch irgendwie funktionieren, nur wie?


----------



## zeja (29. September 2006)

Mit LEFT/RIGHT JOIN geht sowas durchaus....


----------



## Bicko (29. September 2006)

Eigentlich habe ich das mit Left und Right auch so verstanden, doch scheint es keinen wirklichen Einfluss zu haben. Oder ich handhabe die Ausgabe immer noch falsch.


----------



## Bicko (29. September 2006)

Ok, ich habe jetzt auch von zweiter Seite den Vorschlag zu hören bekommen 2 Anfragen zu stellen und diese getrennt zu behandeln. Klar ist das der leichtere Weg und ich hoffe das das nicht unprofessionell ist.

Ich möchte mich ja mit jeder Zeile Sourcecode weiterentwickeln, daher gehe ich häufig Wege die nicht immer einfach sind. 

Ich danke Dir für den Gedankenansatz (schon zum 2. Mal geholfen), manchmal verennt man sich einfach in etwas.

Nochmal Danke und ich mach mich jetzt mal an die Ausarbeitung der 2 Anfragen und der Dropdowns, vielleicht werde ich dann heute Abend noch fertig mit dem ganzem Part...


----------

