TeamViewer Motive 4

[MySQL] JOIN Problem

Ritschy

Cadet 3rd Year
Registriert
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?
 
Ich habe auf meiner Page etwa das selbe Prob.
Ich habe das mit 2 selects gelöst.
Funktioniert ohne Probs.
 
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
 
Die Vareante mit 2 Select`s währe aber etwas übersichtlicher und einfacher aufgebaut.
 
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.
 
Ritschy schrieb:
Kannst Du den Code mal posten?

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...
 
Das sind dann aber nicht 2 Queries, sondern Usercount + 1 Queries.

nicht ganz sooo effektiv :)
 
Zurück
Oben