Vinzenz Mai: MySQL - ID-Spalte tb1(FK) mit Werten aus tb2(PK) auflösen

Beitrag lesen

Hallo,

Hab Stundenlang nach passenden JOIN´s gesucht, und unzählige einfach probiert. Ein gewünschter Erfolg blieb leider bis dato aus :(

Leseempfehlung:
Fortgeschrittene Jointechniken
Abschnitt Selfjoin erläutert die Notwendigkeit von Aliasnamen bei mehrfachem
Join auf die gleiche Tabelle.

messages;
|pnid|absender|empfaenger| icon | betreff | datum               |
|----+--------+----------+------+---------+---------------------+
|  1 |      2 |        1 |04.gif|   Test1 | 2008-01-15 06:00:00 |
|  2 |      3 |        1 |02.gif|   Test2 | 2008-01-15 07:00:00 |

member;
| id | name     |
+----+----------+
|  1 | Member_A |
|  2 | Member_B |
|  3 | Member_C |

Ergebnis-Tabelle sieht so aus:
|  pnid |absender|empfaenger| icon  |betreff| datum               |
|$row[0]| $row[1]|  $row[2] |$row[3]|$row[4]| $row[5]             |
+-------+--------+----------+-------+-------+---------------------+
|     1 |      2 |        1 |04.gif | Test1 | 2008-01-15 06:00:00 |
|     2 |      3 |        1 |02.gif | Test2 | 2008-01-15 07:00:00 |

Jeder sieht sofort was mein gewünschtes Ziel ist, die Spalte absender ($row[1]) in den eigentlichen Namen aufzulösen, hier 2 = Member_B sowie 3 = Member_C.

SELECT                       -- Gib mir  
    ms.pnid,                 -- die id der Nachricht,  
    ab.name,                 -- den Namen des Absenders  
    em.name,                 -- den Namen des Empfängers  
    ms.icon,                 -- das Icon der Nachricht  
    ms.betreff,              -- den Betreff der Nachricht  
    ms.datum                 -- das Datum der Nachricht  
FROM  
    messages ms              -- aus der Nachrichtentabelle messages  
INNER JOIN  
    member ab                -- die mit der Membertabelle, die hier die  
ON                           -- Absender kennzeichnet über das Feld absender  
    ms.absender = ab.id      -- und id verknüpft ist.  
                             -- Der Aliasname für die Tabelle member ist  
                             -- notwendig, weil Du zweimal auf die gleiche  
                             -- Tabelle zugreifst  
  
INNER JOIN                   -- die Nachrichtentabelle messages ist mit  
    member em                -- der Tabelle member als Empfänger über die  
ON                           -- Felder empfaenger und id verknüpft, für den  
    ms.empfaenger = em.id    -- Aliasnamen gilt wieder das gleiche  
WHERE  
    em.name = <nickname>     -- nur Nachrichten des Empfängers <nickname>  

Die Optimierung des Statements überlasse MySQL bzw. starte mit der Tabelle
empfaenger, weil Du über die WHERE-Klausel deren Datensätze auf einen einzigen
reduzierst :-)

gebt mir doch bitte auch einen Tip für die dazu passende INSERT Anweisung

Welches Problem hast Du mit dem INSERT? Welche Daten liegen vor, die
gespeichert werden sollen?

Freundliche Grüße

Vinzenz