[MySQL] JOIN Problem

Ritschy

Cadet 3rd Year
Dabei seit
Aug. 2003
Beiträge
50
MySQL Problem

Hallo,

ich bin gerade dabei eine PHP-basierte Homepage zu basteln, doch jetzt bin ich auf folgendes Problem gestoßen: Ich habe zwei MySQL Tabellen, die ich in einer Abfrage verbinden will. Folgendes Szenario:

erste Tabelle, enthält einen Primärschlüssel sowie eine Beschreibung:

1|Beschreibung1
2|Beschreibung2
3|Beschreibung3
.
.
.


zweite Tabelle, enthält einen Primärschlüssel, weitere Attribute sowie zweimal einen Verweis auf die erste Tabelle:

1|Attribut1|...|1|2
2|Attribut1|...|2|3
3|Attribut1|...|1|3
.
.
.


Ich hätte jetzt gerne eine Tabelle als Ausgabe, die folgendermaßen aussieht (Basierend auf Tabelle zwei mit den Beschreibungen aus Tabelle 1 statt den Verweisen):

1|Attribut1|...|Beschreibung1|Beschreibung2
2|Attribut1|...|Beschreibung2|Beschreibung3
3|Attribut1|...|Beschreibung1|Beschreibung3
.
.
.

Mit einem inner join erhalte ich jedoch immer folgendes Ergebnis:

1|Attribut1|...|Beschreibung1|Beschreibung1
1|Attribut1|...|Beschreibung2|Beschreibung2
2|Attribut1|...|Beschreibung2|Beschreibung2
2|Attribut1|...|Beschreibung3|Beschreibung3
3|Attribut1|...|Beschreibung1|Beschreibung3
3|Attribut1|...|Beschreibung1|Beschreibung3


Momentan sieht meine Abfrage wie folgt aus:

SELECT Tabelle2.*, Tabelle1.Beschreibung AS a, Tabelle1.Beschreibung AS b FROM Tabelle2 INNER JOIN Tabelle1 ON (Tabelle2.Verweis1 = Tabelle1.Primärschlüssel OR Tabelle2.Verweis2 = Tabelle1.Primärschlüssel)

Das haut natürlich nicht hin. Group By Tabelle2.Primärschlüssel hilft auch nicht, da dann immer nur die erste Beschreibung bei a und b steht. Da gibt es sicher noch einen Trick das Porblem zu lösen oder?
 

CaptainIglo

Lt. Commander
Dabei seit
Mai 2003
Beiträge
1.370
Ich habe auf meiner Page etwa das selbe Prob.
Ich habe das mit 2 selects gelöst.
Funktioniert ohne Probs.
 

Ritschy

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
Aug. 2003
Beiträge
50
Ich habs jetzt auch hingekriegt:

Code:
SELECT Tabelle2.Primärschlüssel, Tabelle2.Attribut1, a.Beschreibung AS x , b.Beschreibung AS y 
FROM Tabelle2, Tabelle1 AS a, Tabelle1 AS b
WHERE Tabelle2.Verweis1 = a.Primärschlüssel AND Tabelle2.Verweis2 = b.Primärschlüssel
 

CaptainIglo

Lt. Commander
Dabei seit
Mai 2003
Beiträge
1.370
Die Vareante mit 2 Select`s währe aber etwas übersichtlicher und einfacher aufgebaut.
 

[UPS]Erazor

Lieutenant
Dabei seit
Sep. 2002
Beiträge
753
Eine andere Schreibweise für die Lösung von Ritschy wäre noch sowas:

Code:
SELECT Tabelle2.Primärschlüssel, Tabelle2.Attribut1, a.Beschreibung AS x , b.Beschreibung AS y 
FROM Tabelle2
INNER JOIN Tabelle1 AS a ON (Tabelle2.Verweis1 = a.Primärschlüssel)
INNER JOIN Tabelle1 AS b ON (Tabelle2.Verweis2 = b.Primärschlüssel)
Ist aber das selbe in grün.
 

CaptainIglo

Lt. Commander
Dabei seit
Mai 2003
Beiträge
1.370
Zitat von Ritschy:
Poste jetzt einfach mal mein kompletten Code den ich benutze:
PHP:
		$sqlnd = "select * from users";
		$res = mysql_db_query("$dbname", $sqlnd);
		$num = mysql_num_rows($res);
		for($i=0;$i<$num;$i++)
		{
			$id = mysql_result($res, $i, "id");
			$usern = mysql_result($res, $i, "usern");
			$sqlnd = "select * from firma where id='$id'";
			$res2 = mysql_db_query("$dbname", $sqlnd);
			$firma = mysql_result($res2, 0, "name");
			echo "<tr><td>&nbsp;$id</td><td>&nbsp;$usern</td><td>&nbsp;$firma</td></tr>";
		}
Also meiner Meinung nach einfacher und übersichtlicher, aber jedem das seine...
 

[UPS]Erazor

Lieutenant
Dabei seit
Sep. 2002
Beiträge
753
Das sind dann aber nicht 2 Queries, sondern Usercount + 1 Queries.

nicht ganz sooo effektiv :)
 
Top