Forum Doku Wiki Blog

Forumsarchiv 2006, Dezember
MySQL > Problem mit JOIN ?!

archivierte Beiträge lesen

  1. (DATENBANK) MySQL > Problem mit JOIN ?! von Snafu, 27. 12. 2006, 22:04

MySQL > Problem mit JOIN ?!

Der folgende Beitrag wurde am 27. 12. 2006, 22:04 Uhr von Snafu veröffentlicht.

Hallo!
Ich habe gerade 2h nach meinem Problem gesucht aber da ich nicht weiß, wie man es ausdrücken soll habe ich nichts gefunden.
Mein Problem ist folgendes:
Ich habe sagen wir mal 2 Tabellen (hier einfaches Beispiel)

Tabelle 1:
+------+------------+-----------------+
|..id..|..nickname..|.......email.....|
+------+------------+-----------------+
|...1..|...Foo......|...myfoo@aol.com.|
|...2..|...Bar......|...mybar@aol.com.|
|...3..|...Foobar...|..foobar@aol.com.|
|...x..|...XXX......|...XXXXXXXXXXXXX.|
+------+------------+-----------------+

Tabelle 2:
+------+-----------+----------+--------------------+
|..id..|.recipient.|..sender..|.......msg..........|
+------+-----------+----------+--------------------+
|..xx..|......x....|.......X..|..XXXXXXXXXXX.......|
|..24..|......1....|.......2..|..Hallo, wie gehts?.|
|..34..|......2....|.......3..|..Mhmm Pie!!!.......|
|..xx..|......x....|..........|..XXXXXXXXXXX.......|
+------+-----------+----------+--------------------+


Ich will nun mit einer SQL-Abfrage die Tabelle 2 wie folgt auslesen:
id, recipient->nickname, sender->nickname, msg
Ich schaffe es, dass eine id (sender/recipient) durch den nickname ersetzt wird und zwar mit folgendem SQL-Query (sollte zumindest gehen, mein Hirn ist im Moment Matsch. Vielleicht is folgendes QRY nur Blödsinn).

SELECT a.id, b.nickname, a.sender, a.msg FROM tabelle2 AS a LEFT JOIN tabelle1 ON a.id = b.id

Wie kann ich jetzt a.sender auch durch b.nickname (allerdings den mit der id von a.sender) ersetzen?

MfG,
Snafu

MySQL > Problem mit JOIN ?!

Der folgende Beitrag wurde am 27. 12. 2006, 22:30 Uhr von _roro veröffentlicht.

Hi,

JOIN Syntax geht anders. Grundsätzlich musst Du angeben on LEFT oder RIGHT, INNER oder OUTER JOIN.

Beispiel LEFT OUTER JOIN

SELECT name.tabX, addr.tabY FROM tabX LEFT OUTER JOIN tabY ON primary_key.tabX = foreign_key.tabY

--roro

MySQL > Problem mit JOIN ?!

Der folgende Beitrag wurde am 27. 12. 2006, 22:38 Uhr von Rouven veröffentlicht.

Hello,

dein Problem ist, dass du es hier nicht mit einer klassischen Beziehung zwischen 2 Tabellen zu tun hast, sondern ja eigentlich mit 2,5 Tabellen - warum? Weil deine tabelle2 über 2 Felder mit der tabelle1 in Beziehung steht.
Dein Ansatz zum Join beruhte auf grundsätzlich richtiger Syntax aber falscher Logik.
Zunächst mal etwas zur Vertiefung: SELFHTML-Artikel: Datenbanken - dort finden sich zwei Artikel zum Thema Joins.

So, nun überlegen wir also mal konkret zu deinem Problem:
Du möchtest in EINER Abfrage alle tabelle2-Sätze haben, wobei SENDER und RECIPIENT aufgelöst wurden. Das sind also zwei Joins.
Zur Frage welcher Join: Wenn alles richtig läuft, dann muss der Nutzer mit der jeweiligen ID ja vorhanden sein, also kannst du ruhig zum INNER Join greifen - der LEFT Join lohnt nur, falls du befürchtest eine oder beide Kennungen könnten nicht mehr existieren.

SELECT post.id, sender.nickname, recipient.nickname, post.msg
FROM
   tabelle2 AS post
INNER JOIN
   tabelle1 AS sender
   ON post.sender = sender.id
INNER JOIN
   tabelle1 AS recipient
   ON post.recipient = recipient.id

Prinzip klar? Wenn nicht, frag, sonst hats nichts gebracht.

MfG
Rouven

--
-------------------
Death is nature's way of telling you to slow down.

MySQL > Problem mit JOIN ?!

Der folgende Beitrag wurde am 27. 12. 2006, 23:25 Uhr von Snafu veröffentlicht.

O.K. danke!
Ich glaub ich habs verstanden. Nach einer auszeit vom ganzen Datenbank-Zeug kann ich wieder halbwegs klar denken :)

MfG,
Snafu

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4