MySQL - Abfrage über mehrere Tabellen

B

BalkonSurfer

Mitglied
Thread Starter
Dabei seit
27.07.2003
Beiträge
5.253
Reaktionspunkte
2
Hi,
ich habe ein Problem mit einer Abfrage:

Tabelle1:
id,name,inhaltid
1,müller,1
2,schmidt,2

Tabelle2:
id,inhalt
1,12345
2,54321

Und bei einer Abfrage "Select id, name, inhaltid from Tabelle1" hätte ich gern anstatt die inhaltid den Inhalt aus Tabelle2.

Also mein gewünschtes Ergebniss wäre dann:
1,müller,12345
2,schmidt,54321


Jetzt kann ich ja mit jeder Rückgabezeile aus Tabelle1 eine neue Abfrage für Tabelle2 stellen, aber das ist wahrscheinlich nicht zu empfehlen.

Wie mache ich das?

Danke und Gruß
 
SELECT id,name,inhalt FROM Tabelle1, Tabelle2
 
PHP:
$query = "SELECT * FROM
  tabelle1 as t1
INNER JOIN 
  tabelle2 as t2 ON (t1.inhaltid = t2.id)
WHERE
  ...
ORDER BY
 ...";

Das sollte helfen
 
Danke!
Endlich habe ich auch den Sinn von Join kapiert ;)
 
Braucht man gar nicht ganz so kompliziert machen mit dem benennen der Tabellen etc. Ein einfaches:

PHP:
$query = "
SELECT * FROM
 tabelle1
LEFT JOIN tabelle2 ON tabelle2.id=tabelle1.inhaltid
WHERE
  ...
ORDER BY
 ...";
reicht aus.

Evtl. solltest Du Dir aber mal Gedanken zu Deinen Feldernamen machen, weil es bei einer solchen Bezeichnung recht schnell unübersichtlich wird und man bei einer anderen Bezeichnung die "tabelleXY." weglassen kann.

Beispiel:
Tabelle1 (personen)
pers_id
pers_name
pers_inh_id

Tabelle2 (inhalte)
inh_id
inh_inhalt

Wenn man es so macht, dann kann man den Query nochmal verkürzen auf:
PHP:
SELECT * FROM
 personen
LEFT JOIN inhalte ON inh_id=pers_inh_id
WHERE... 
ORDER BY ...
 
Hi,

nur mal so reingeschmissen. In Deiner Struktur möchte ich Dir nur mal einen Hinweis gehen. Willst Du die typische Adressen- Kontaktgeschichte abdecken!? Dann solltest Du gleich darüber nachdenken, daß eine Person mehrer Adressen haben kann und zwischen die beiden Tabelle eine sogeannte Bewegtabelle schalten, die einzig die beiden Schlüssel aus beiden Tabellen führt. So bist Du für die Zukunft abgesichert und mußt nicht für den Selben Kontakt zwei Kontaktsätze anlegen, um z.B. berufliche Adresse und private Adresse in den Daten zu haben.

Kontakt:
1,mueller
2,meier

Adresse:
10,beruflich,werkstraße
20,privat,feriendorf
30,privat,hupfdudel

Bewegtabelle:
1,10
1,20
2,30

Also hat hier mueller zwei Adressen und meier eine.

Bye
Mirko
PS: Sollte ich am Thema komplett vorbei sein - einfach ignorieren :D
 
@Paelmchen: Zu den Bewegtabellen hab ich ne Frage:

Wenn jetzt z.B. meier *keine* Adresse (Feld=NULL) hat. Wie zeig ich dann trotzdem die Tabelle an?

Soll sowas rauskommen:

mueller | beruflich | werkstraße
mueller | privat | feriendorf
meier | NULL

Ein normaler Join würde den letzten Eintrag ja fallen lassen. Es muss also ein left Join sein, aber wie bekomm ich das über 3 Tabellen hin?
 
Jakob schrieb:
Ein normaler Join würde den letzten Eintrag ja fallen lassen. Es muss also ein left Join sein, aber wie bekomm ich das über 3 Tabellen hin?

Wenn ich mich erinnere, kann man mehrere Joins in der Selectabfrage haben.

Gunter
 
Diesen Left Join mußt Du nach rechts weitergeben, dann gibt es keinen Streß :)
 
Zurück
Oben Unten