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