• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

MySql join doppelt

Mark

Neues Mitglied
Nachdem ich aus dem letzten Thema gelernt habe, wie das funktioniert, mit left join und right join kommt jetzt die advanced Version.
Ich möchte 2 Namen zu jedem Datensatz joinen.

Die umständliche Variante, ohne join wäre so:

Code:
$liste = array();

$abfrage = mysql_query("SELECT * FROM `tabelle1` WHERE `irgendwas` = ".$irgendwas);
while($row = mysql_fetch_object($abfrage))
     {
          $name1 = mysql_fetch_object(mysql_query("SELECT `name` FROM `members` WHERE `id` = ".$row->id1));
          $name2 = mysql_fetch_object(mysql_query("SELECT `name` FROM `members` WHERE `id` = ".$row->id2));
          $row->name1 = $name1->name;
          $row->name2 = $name2->name;
          $liste[] = $row;
     }

Wenn ich jetzt versuche die Lösung aus dem letzten Thema anzupassen

Code:
$abfrage = mysql_query("SELECT a.`name` FROM `members` AS a RIGHT JOIN `tabelle1` AS b ON a.`id` = b.`id`");

dann habe ich gleich mehrere Probleme:

1) Ich brauche 2 Namen aus 2 verschiedenen Datensätzen der members Tabelle für jede Zeile aus tabelle1, aber wie bringe ich dem Ergebnis bei, dass ich dafür 2 verschiedene Spaltennamen brauche?
2) Das Ergebnis soll aus der members Tabelle die beiden Namen enthalten, aber keine weiteren Spalten aus der members Tabelle, dafür sollen alle Spalten aus tabelle1 enthalten sein, vermutlich also
SELECT a.`name`, b.*
aber selbst wenn das stimmt, beide Namen habe ich dann immer noch nicht.
3) Aus
ON a.`id` = b.`id`
müsste vermutlich sowas werden:
ON a.`id` = b.`id1` OR a.`id` = b.`id2`
aber wie bringe ich das Ergebnis dazu beides in denselben Datensatz zu packen?
 
Die "Probleme" siehst nur du ;)

Code:
SELECT a.`name` as aname, b.`name` as bname, c.`name` as cname
FROM `members` AS a 
RIGHT JOIN `tabelle1` AS b 
ON a.`id` = b.`id`
RIGHT JOIN `tabelle1` AS c
ON a.`id2` = c.`id`

:arrow: Tipp: eine Tabelle kann man auch mehrfach joinen.
 
Ausprobiert, ging erstmal nicht, aber aus dem Ansatz konnte ich es mir dann zusammenreimen.
Umgestellt auf LEFT JOIN funktioniert es so:

Code:
SELECT
    a.*,
    b.`name` as name1,
    c.`name` as name2
FROM `tabelle1` as a

LEFT JOIN `members` as b
ON
    a.`id1` = b.`id`

LEFT JOIN `members` as c
ON
    a.`id2` = c.`id`
 
Zurück
Oben